var makePromise = function(value, time) {
return new Promise(function(resolve, reject){
setTimeout(function() {
resolve(value);
}, time)
})
};
function order1(promiseList) {
return new Promise((resolve, reject) => {
let result = [];
let i = 0;
for (let p in promiseList) {
promiseList[p].then(value => {
result[p] = value
i++;
console.log(value);
if (i === promiseList.length) {
resolve(result);
}
return Promise.resolve(value)
}, reject);
}
});
}
order1([
makePromise('a', 3000),
makePromise('b', 1000),
makePromise('c', 2000),
]).then(v=>{
console.log(v);
})
在for循环的console.log中 data返回的是b,c,a 并不如期望的a,b,c 有大神指导下如何修改吗 这是一道面试题 使用递归的方法在then中打印data 是 延迟之后同时输出abc 在循环中则是每间隔1秒 输出bca
用同步循环的话顺序不会变,各
Promise
之间没有影响,要强制把他们的resolve
顺序改变,比较直观的方法是用递归:同步循环(指没有 await 的循环)也可以做到与
Promise.all
规范一致:但是如果在
.then
中打印的话,打印顺序和他们在数组中的顺序是不一致的。