手写promise all
时间: 2023-09-24 22:05:49 浏览: 92
好的,现在来介绍一下手写Promise.all()的方法。首先我们需要明确Promise.all()的作用是什么。该方法可以接收一个由多个Promise实例组成的数组作为参数,返回一个新的Promise实例。该新实例在数组中所有Promise实例都成功执行后才会被解决,返回值对应每个Promise实例的结果,如果其中有一个被拒绝则整个新的Promise实例都会被拒绝并返回被拒绝的理由。
下面是手写Promise.all()的具体实现代码:
```javascript
function myPromiseAll(promises) {
return new Promise(function(resolve, reject) {
let results = [], count = 0;
promises.forEach(function(promise, index) {
Promise.resolve(promise).then(function(result) {
results[index] = result;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch(function(reason) {
reject(reason);
});
});
});
}
```
以上代码会创建一个新的Promise实例,并对传入的Promise数组进行遍历,每个子Promise实例通过Promise.resolve()进行类型转换,之后在子Promise实例中执行.then()方法捕获结果,将结果存入一个数组中。当所有子Promise实例都执行完毕时,新的Promise实例将以已解决的状态返回执行结果数组。如果其中任何一个子Promise实例被拒绝,则该新Promise实例将在被拒绝的状态下返回拒绝的理由。
希望这份代码可以对你有所帮助。
阅读全文