0

現在、NodeJS (Koa フレームワークを使用) で POST データを処理する子プロセスを生成しようとしています。

理想的には、リダイレクトする前に子プロセスが終了するのを待ちたいのですが、子プロセスは非同期であるため、コードは常に最初にリダイレクトします。私は長い間これを修正しようとしてきましたが、部分的に解決するためのいくつかのハックな方法を思いつきましたが、非常にきれいで使いやすいものはありません。

これを処理する最善の方法は何ですか?

以下は、ポストルートの関数です (koa-route ミドルウェアを使用)。

function *task() {
        var p = spawn("process", args);
        p.on("data", function(res) {
                // process data
        });

        p.stdin.write("input");

        this.redirect('/'); // wait to execute this
}
4

1 に答える 1

4

koa で同期タスク/何かが行われるのを待つにyieldは、コールバック引数を取る関数が必要です。この場合、子プロセスが完了するのを待つには、「exit」イベントを発行する必要があります。また、stdout のイベントcloseなどの他の子プロセス イベントをリッスンすることもできます。endそれらは終了前に放出されます。

したがって、この場合、使用yield function (cb) { p.on("exit", cb); }するように減らすことができるはずですyield p.on.bind(p, "exit");Function::bind

function *task() {
  var p = spawn("process", args);
  p.on("data", function(res) {
    // process data
  });

  p.stdin.write("input");

  yield p.on.bind(p, "exit");

  this.redirect('/'); // wait to execute this
}

ヘルパー モジュールを使用して支援することもできます

于 2014-05-25T08:57:48.783 に答える