慕雪6442864
2023-11-02 16:56:17
我正在嘗試學習如何用 JS 鏈式承諾。我在這里看到了代碼,他們使用 forloop JavaScript ES6 Promise for Loop 來完成它。我發(fā)現(xiàn)它很酷,并決定進行一些小的調(diào)整來嘗試一下。但它沒有奏效。如果您能告訴我為什么這不起作用,我將非常感激這是我的代碼://Goal: print from 0-10 in order at random timesfunction test() { for (let i = 0, p = Promise.resolve(); i < 10; i++) { p = p.then(createPromise(i)); }}function createPromise(i) { return new Promise(resolve => setTimeout(function () { console.log(i); resolve(); }, Math.random() * 1000) )}test();這是我的代碼的輸出9178063254
1 回答

小怪獸愛吃肉
TA貢獻1852條經(jīng)驗 獲得超1個贊
.then需要回調(diào),而不是 Promise - 目前,您在循環(huán)內(nèi)createPromise(i) 立即調(diào)用。創(chuàng)建一個在調(diào)用時返回Promise 的函數(shù):
p = p.then(() => createPromise(i));
function test() {
for (let i = 0, p = Promise.resolve(); i < 10; i++) {
p = p.then(() => createPromise(i));
}
}
function createPromise(i) {
return new Promise(resolve =>
setTimeout(function () {
console.log(i);
resolve();
}, Math.random() * 1000)
)
}
test();
添加回答
舉報
0/150
提交
取消