手写 Promise.all 和 Promise.race

一、手写 Promise.all:

思路:

1. 首先 Promise.all返回的肯定是一个 promise对象,所以可以直接写 return new Promise((resolve, reject) => {});

2. 遍历传入的参数,用 Promise.resolve() 将参数的每一项进行一个包裹,使其变成一个 promise 对象,因为传入的参数不一定是 Promise 类型,可能不存在 then 方法;

3. 关键点是何时 resolve,可以声明一个变量,进行计数,当在每个 promise 对象 then 之后将 res放入到 result 中后,就可以将计数器 +1,当 +1 后与传入的参数的长度进行比较,如果相等就可以resolve了;

4. 如果期间有报错,就直接 reject 掉,后面的不再执行了,因为 Promise.all 就是所有都 resolve 才可以;

5. 官方规定Promise.all 接受的参数是一个可遍历的参数,所以未必是一个数组,

你可能感兴趣的:(js,进阶,前端,ajax,javascript)