2

約束を返す非同期関数があるとしましょう。これらの関数の多くを連鎖させたいと思います。それぞれが異なる引数を持っています。

この配列を実行する関数は次のようになります。

function executePromiseQueueSync(queue){
    var seed = $.Deferred(),
        finalPromise;

    _reduce(queue, function(memo, promise){
        return memo.then(promise);
    }, seed.promise());

    seed.resolve();
    return finalPromise;
}

いくつかの関数がpromiseの配列を受け入れ、それらを同期的に実行するのを見ました。問題は、そのような配列を作成する方法がわからないことです。例:

var promiseQueue = [];
promiseQueue.push(AsynchEvent(someArg)); // WRONG: this is function call and will be executed immediately

別:

var promiseQueue = [];
promiseQueue.push(AsynchEvent); // WRONG: at some point I will have to apply this with arguments

それで-promiseを返す関数を実行せずに配列に入れる方法はありますか?

4

1 に答える 1

1

編集後に更新:

さて、最初からその情報を含めておくといいので、ここで試してみます。

最初の入力がわかっていて、最後の関数から戻ったものがリスト内の次の関数に入ると仮定します。

その場合でも、以前と同じようにキューを定義して追加します。

var promiseQueue = [];
promiseQueue.push(AsynchEvent);

ただし、ループを少し変更する必要があります。使い方を示すためだけに関数にします。

function calcPromise(initialArg) {
  aggregateArg = initialArg;
  for (var i = 0; i < myStringArray.length; i++) {
    aggregateArg = promiseQueue[i](aggregateArg);
  }
  return aggregateArg;
}

これはJavaScriptであることに注意してください。ある関数から返して次の関数にフィードするものは、この関数の2つの反復間で完全に異なる可能性があります。例えば

  • promiseQueue [0]は、intを期待し、JSON構造体を返すことができます。
  • promiseQueue [1]は、JSON構造体を期待し、文字列を返すことができます。
  • 等々。
于 2013-03-08T09:21:52.673 に答える