2016-12-21 6 views

答えて

1

場合あなたは配列で実現された約束を持っていて、その配列の長さがわかっているなら、.spread()を使って配列を個々の関数引数に変換することができます。ハンドラを呼び出す前に、引数を配列から個々の引数に変換するのは.then()の代わりです。これに代えので

、:

someFunction().then(function(arrayOfArgs) { 
    let arg1 = arrayOfArgs[0]; 
    let arg2 = arrayOfArgs[1]; 
}); 

あなたがこれを行うことができます:あなたの特定のコード例では、Promise.join()はすでに個々を分離するコールバックを提供しています、だから、

someFunction().spread(function(arg1, arg2) { 
    // can directly access arg1 and arg2 here 
}); 

を結果はまったく必要ないはずです。だから、あなただけのこの操作を行うことができます:

return Promise.join(
     findStagingAdvanced(stagingQuery), 
     findDboAdvanced(dboQuery), 
     (stagingIssues, dboIssues) => _.concat(dboIssues, stagingIssues) 
    ).then(allIssues => { 
     // allIssues contains combined results of both functions above 
    }); 

何このコードはfindStagingAdvanced()findDboAdvanced()から結果を収集し、その結果の一つの配列にまとめて、それらの結果をマージされてやっています。


それはこのように(例えば、ブルーバードの余分な機能なし)標準ES6で書くことができます明確な説明のための

return Promise.all([findStagingAdvanced(stagingQuery), findDboAdvanced(dboQuery)]) 
    .then(results => results[0].concat(results[1])) 
    .then(allIssues => { 
     // allIssues contains combined results of both functions above 
    }); 
+0

感謝 –

0

それはあなたが変異される余分な変数を持っているでしょうfindStagingAdvancedfindDboAdvancedの結果を取得し、普及することなく、中間変数

せずにそれらを一緒にマージすることができます:

var staging; 
findStagingAdvanced(stagingQuery) 
.then(stagingQuery => { 
    staging = stagingQuery; // not that good practice 
    return findDboAdvanced(dboQuery); 
}) 
.then(dboQuery => { 
    var merged = [staging, dboQuery]; 
    return ... // another promise that use staging and dboQuery together 
}) 
関連する問題