8

渡された 3 つの前の promise の結果を必要とする関数があります。1 つは線形的に依存し、他の 2 つは同時に実行できます。q.all を使用して 3 つのプロミスを解決し、結果を .spread を使用して 4 つ目に渡したいと考えています。ただし、私のコードは機能しません。どんな助けでも大歓迎です。

var p1 = doWork(data);
var p2 = p1.then(doMoreWork);
var p3 = doConcurrentWork(data);

return q.all([p1,p2,p3]).spread(funcWith3params)
        .fail(function(err) {
            console.log(err):
        }

node-inspector でコードをトレースすると、最初の 3 つの promise が呼び出されていることがわかります。ただし、.spread が呼び出す関数は呼び出されていません。理由の手がかりはありますか?また、 .fail もヒットしていません。

4

2 に答える 2

3

あなたが提供した例を表現する最も簡潔な方法は次のとおりです。

var p1 = doWork(data);
var p2 = p1.then(doMoreWork);
var p3 = doConcurrentWork(data);

return Q.spread([p1, p2, p3], funcWith3params)
    .done();

ただし、原文は書かれているとおりです。

問題は、入力プロミスの 1 つ以上が解決されないことにあると思われます。タイムアウトを使用して問題を切り分けてみてください。

var p1 = doWork(data).timeout(1000, 'p1 timed out');
var p2 = p1.then(doMoreWork).timeout(1000, 'p2 timed out');
var p3 = doConcurrentWork(data).timeout(1000, 'p3 timed out');

return Q.spread([p1, p2, p3], funcWith3params)
   .done();
于 2013-06-12T17:01:23.513 に答える