1

コードで複数のバッチ非同期操作を実行しています。バッチ内の操作は非同期で実行する必要がありますが、バッチは次々と同期的に実行する必要があります。

これが私が作成したjsfiddleです。すべての出力がそこにあるので、コンソールを見てください。便宜上、コードを次に示します。

asyncChain(10, 'FIRST CHAIN')
.then(function () {
  asyncChain(10, 'SECOND CHAIN');
})
.then(function(){
  asyncChain(10, 'THIRD CHAIN');
});

function asyncChain(n, msg) {
  var promiseChain = Q.fcall(function () {
    10;
  });
  console.log('starting:' + msg);
  for (var i = 0; i < n; i++) {
    promiseChain = promiseChain.then(asyncOperation(i, msg));
  }
  console.log('returning' + msg);
  return promiseChain;
}

function asyncOperation(i, msg) {
  var d = Q.defer();

  setTimeout(function () {
    console.log('resolving for #' + i + msg);
    d.resolve(i);
  }, 300 + Math.random()*1000);

  return d.promise;
}

基本的に、これらは 3 つのバッチ化された promise 操作であり、次々と終了する予定です。このサンプルの出力は次のようになります。

starting FIRST CHAIN
returning FIRST CHAIN
resolving 1..10 FIRST CHAIN

starting SECOND CHAIN
returning SECOND CHAIN
resolving 1..10 SECOND CHAIN
and so on

all()代わりにメソッドを使用してみthen()ましたが、最初のチェーンの後に実行が停止しました。明らかな何かが欠けていますか?

アドバイスをありがとう。

乾杯

4

1 に答える 1