[英]Delay in Promises chain resolution
我嘗試順序執行諾言,但時間安排出了點問題...
當我執行以下代碼時,我立即得到五個響應“我是XXX,我得到YY”,兩秒鍾后,我收到了“成功”消息。
我想要的是首先獲取消息“我是XXX,我得到YY”,間隔2秒,然后成功。
任何想法 ?
"use strict";
Promise.resolve()
.then(doStuff)
.then(function () {
console.log("Success");
})
function doStuff() {
let item = [1, 2, 3, 4, 5, 6];
// Construction du tableau de promises
let array = item.map(i => {
let pro = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Item " + i);
}, 2000 );
});
pro.custom = i;
return pro;
});
let pro = array.reduce((p, item) => {
return p.then((val) => {
console.log("I'm " + item.custom + " and I get " + val);
return Date.now();
});
}, Promise.resolve());
return pro;
}
(對不起,我的英語不好)。
當前,所有延遲都在同一時間開始,這就是為什么它們一次都匆忙結束的原因,以及為什么doStuff和Success
消息之間只有2秒的延遲
如果按以下方式更改doStuff,則輸出應相同,但數組中各項之間的延遲為2秒
function doStuff() {
let item = [1, 2, 3, 4, 5, 6];
let delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
return item.reduce((p, val, i) =>
p
.then(() => delay(2000))
.then(() => {
console.log("I'm " + i + " and I get " + val);
return Date.now();
}), Promise.resolve());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.