3
q.ninvoke(myNodeJsFunc).then(function(result) {
    console.log(arguments);
});

function myNodeJsFunc(callback) {
    callback(null, arg1, arg2, ..., argN); // first argument is null as no error occurred
}

戻すだけならarg1resultになりますarg1。複数の引数を返すresultと、は引数の配列になります。配列にバンドルされて単一の引数として返されるのではなく、各引数を個別の引数として関数に適用してQをコールバックする方法はありますか?任意の要素の配列をふるいにかけるのではなく、名前付き引数を使用できるようにしたいと思っていました。

事実上、私はこれを実行できるようにしたいと思います。

q.ninvoke(myNodeJsFunc).then(function(arg1, arg2, arg3) {
    // do stuff
    if(arg2) {
        // do stuff
    }
    // etc.
});
4

1 に答える 1

5

あなたができる、あなたが求めているものは呼ばれていますspread

q.ninvoke(myNodeJsFunc)
  .spread(function(arg1, arg2, arg3) {
    // do stuff
    if(arg2) {
      // do stuff
    }
    // etc.
  });

これがデフォルトではない理由は、promiseの背後にある前提の一部は、promiseを可能な限り同期の対応物に近づけることであるためです。そうすれば、将来的に次のことができるようになります。

spawn(function* () {
  var res = yield q.ninvoke(myNodeJsFunc);
  res[0], res[1]...
});

yield魔法が起こる場所であるキーワードを除いて、これは同期しているように見えます。

JavaScriptのspread次のバージョンでは、次のように記述できるため、演算子は問題ありません。

spawn(function* () {
  let [arg1, arg2, arg3...] = yield q.ninvoke(myNodeJsFunc);
  arg1, arg2 ...
});

これは同期コードとうまく似ています:

let [arg1, arg2, arg3...] = mySyncFunc();
arg1, arg2 ...

つまり、複数の引数が必要な場合は、に置き換えthenspreadください。

于 2013-01-29T22:59:49.283 に答える