我尝试依次执行诺言,但定时出现问题...
执行以下代码时,我立即得到了五个响应"我是XXX,我得到了YY",在2秒钟后,我收到了"成功"消息。
我想要的是首先收到消息"我是xxx,我得到了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;
}
(对我的英语差而抱歉)。
当前,所有延迟都是同时启动的,这就是为什么它们都立即完成,以及为什么在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());
}