Nodejs-Kooa 2は結果プロセスを非同期に戻すことができる.

1461 ワード

Koua 2における戻り結果関数は、非同期プロセスを含むことができ、nodejsバージョンを使用すると8より大きい場合、Aync/Awaitを使用することができる.nodejsバージョンが低いなら、関数もPromiseに戻ります.結果も正しいです.
ユーザ要求に非同期の操作がない場合、もちろんこれは珍しく、他の言語の過程と区別していませんが、非同期のプロセスはNodejsには卵用がないようです.例えば、
const Koa = require("koa");
const app = new Koa();
const Router = require("koa-router");
const router = new Router();

app.use(router.routes());

router.post(ctx => {
  return 234 * 123;
});

app.listen(2333, () => { });
卵はあまり使われていません.原因はI/Oに関する操作で、データベースやファイルなどの操作はNodejsにおいて非同期で、順番に返却した結果が大きい可能性があります.例えばファイルをアップロードして、もしユーザーが大きなファイルをアップロードする可能性があるならば、私達は通常ストリームを使ってファイルを保存します.そうでなければ、すべてのクライアントからのファイルを受け取り終わって、メモリを全部読み込む必要があります.また書き込みを開始します.もし合併量が大きいなら、システムは崩壊寸前です.ですから、ファイルの流れを全部保存してから、結果が戻ってくるのを待つ必要があります.
これを行うには、Aync/Awaitを使用することができますが、パッケージフロー書き込みプロセスはPromiseである必要があります.以下のとおりです
function asyncRes() {
    return new Promise((resolve, reject) => {
        file.pipe(fs.createWriteStream(‘target.png’));
           file.on(‘close’, err => {
            if (err) {
               reject({msg: ‘fail’})
            }
            resolve({msg: ‘success’})
        })
    }
}
次に、routerでこの関数を呼び出します.
const Koa = require("koa");
const app = new Koa();
const Router = require("koa-router");
const router = new Router();

app.use(router.routes());

router.post(async (ctx) => {
  await asyncRes();
});

app.listen(2333, () => { });