手写一个Promise.all
时间: 2023-11-02 17:00:31 浏览: 111
好的,下面是手动实现的 `Promise.all` 的代码:
```javascript
function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let counter = 0;
function checkCompletion() {
counter++;
if (counter === promises.length) {
resolve(results);
}
}
for (let i = 0; i < promises.length; i++) {
promises[i]
.then((result) => {
results[i] = result;
checkCompletion();
})
.catch(reject);
}
if (promises.length === 0) {
resolve(results);
}
});
}
```
该函数接受一个 Promise 数组作为参数,并返回一个新的 Promise。它会等待所有的 Promise 完成,并将其结果以数组的形式传递给新的 Promise。
使用示例:
```javascript
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 2);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, 3);
});
myPromiseAll([promise1, promise2, promise3])
.then((results) => {
console.log(results); // [1, 2, 3]
})
.catch((error) => {
console.error(error);
});
```
希望这个手写的 `Promise.all` 对你有所帮助!如果还有其他问题,请随时提问。
阅读全文