我試圖動態鏈接承諾,以處理需要按順序發生的未知數量的異步調用。我使用支持Promise的IO.JS/chrome。javascript ES6動態鏈接承諾
承諾的創建立即觸發(至少相對於控制檯輸出)。我期待能夠收集承諾,然後傳遞給Promise.all,但那時他們已經因爲我不明白的原因而被解僱了。
這裏有那麼鏈接的一種方法,通過一個評論對Dynamic Chaining in Javascript Promises
var lastPr = null;
console.log(" exit setup......................");
while(this.statesToExit.length > 0) {
var v = this.statesToExit.shift();
console.log("new Promise...");
var pr = new Promise(function (resolve, reject) {
console.log("doing Exit stuff at time " +curTime);
resolve(); //SOMETHING MORE SUBSTANTIAL GOES HERE
});
console.log("lastPr.then.");
if (lastPr != null) {
lastPr.then(pr);
}
lastPr = pr;
// console.log("adding pr to worklist");
// promiseList.push(pr);
// });
}
提出的另一種方法是
var promiseList= [];
console.log(" exit setup......................");
while(this.statesToExit.length > 0) {
var v = this.statesToExit.shift();
console.log("new Promise...");
var pr = new Promise(function (resolve, reject) {
console.log("doing Exit stuff at time " +curTime);
resolve(); //SOMETHING MORE SUBSTANTIAL GOES HERE
});
console.log("adding pr to worklist");
promiseList.push(pr);
});
}
console.log("Transition *START*-" +promiseList.length +" ");
Promise.all(promiseList).catch(function(error) {
console.log("Part of TransitionCursor Failed!", error);
}).then(this.summarizeWorkDone());
在這兩種情況下,輸出類似
new Promise...
doing Exit stuff at time 0
new Promise...
doing Exit stuff at time 0
"Transition *START*-"
VS預計的
new Promise...
new Promise...
"Transition *START*-"
doing Exit stuff at time 0
doing Exit stuff at time 0
我該如何動態創建一個承諾列表以便稍後執行?
它爲什麼無論什麼時候到底是執行承諾的身體嗎?承諾不保證他們的身體稍後會被執行。 – zerkms
也許承諾不是你在這裏需要的東西,看起來像執行順序很重要,所以你想建立某種按摩隊列,然後讓它執行..但在你的例子中,如果只有一個項目statesToExit ? – webdeb
你對承諾做什麼以及如何使用它們的理解看起來相當遙遠。我們可以幫助您重新構建,但需要了解是否希望所有異步操作以串行(一個接一個)或並行(全部同時開始)運行?我們還需要查看您的實際異步操作。現在你的問題中的代碼完全是同步的,因此不需要承諾。 – jfriend00