我尝试按顺序执行promises但是时间错误......
当我执行以下代码时,我立即得到了五个回复"我是XXX,我得到了YY" 2秒后,我获得了成功"消息。
我想要的是第一个收到消息"我是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;
}
(抱歉我的英语不好)。
答案 0 :(得分:0)
目前,所有的延迟都是在同一时间开始的,这就是为什么他们都会立刻完成,以及为什么在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());
}