手写Promise.all

582 阅读1分钟

背景

这几天又重新复习了一下Promise,温故而知新嘛,看到两个有关Promise的面试题,自己也手写了一下,写在下面

实现 Promise.all

  1. 要 return 一个Promise 实例
  2. 要注意在都结束的时候,调用resolve
  3. 挨个调用数组里promise实例的then方法
  4. 注意catch
  5. 注意最后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())