考慮下面的代碼,我從https://stackoverflow.com/a/28250704/460084瞭解Promise.all
function getExample() {
var a = promiseA(…);
var b = a.then(function(resultA) {
// some processing
return promiseB(…);
});
return Promise.all([a, b]).spread(function(resultA, resultB) {
// more processing
return // something using both resultA and resultB
});
}
了,我開了https://jsfiddle.net/Lsobypup/
的想法是運行多個承諾並返回基於一些複合價值的代碼演示他們的結果。
我不明白爲什麼在上面的代碼中promiseA只運行一次?在我看來,使用Promise.all([a,b])時,它應該先評估a時運行,然後再評估b時評估它,因爲它依賴於a。但是,演示顯示這並未發生。
Promise.all有一些神奇的事情來做到這一點嗎?圍繞這種行爲的規則是什麼?
'應該先運行時是evaluated':你認爲這種情況發生的時候? –
這是一個答案?如果我瞭解它,我不會問 – kofifus
不是。這是一個問題。你認爲它發生在'var a = promiseA()...'行嗎? –