背景
这几天又重新复习了一下Promise,温故而知新嘛,看到两个有关Promise的面试题,自己也手写了一下,写在下面
实现 Promise.all
- 要 return 一个Promise 实例
- 要注意在都结束的时候,调用resolve
- 挨个调用数组里promise实例的then方法
- 注意catch
- 注意最后resolve的是一个数组
Promise.all = function (arrP) {
return new Promise(function(resolve,reject) {
const arr = [];
let index = 0;
for (const [i, p] of arrP.entries()) {
p.then((res) => {
arr.push(res);
index += 1;
if (index === arrP.length) {
resolve(arr);
}
}).catch(err => console.log(err));
}
})
}
使用Promise实现每隔1秒输出1,2,3
const arr = [1, 2, 3]
arr.reduce((p, x) => {
return p.then(() => {
return new Promise(r => {
setTimeout(() => r(console.log(x)), 1000)
})
})
}, Promise.resolve())