实现一个promise.all
时间: 2023-01-11 15:55:36 浏览: 82
如果你想实现一个`Promise.all`函数,那么可以这样做:
```
function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
let completedPromises = 0;
let resultValues = [];
promises.forEach((promise, index) => {
promise.then(value => {
completedPromises++;
resultValues[index] = value;
if (completedPromises === promises.length) {
resolve(resultValues);
}
}).catch(reason => {
reject(reason);
});
});
});
}
```
这个函数接受一个包含多个Promise对象的数组,并返回一个新的Promise对象。在所有的Promise对象都完成时,返回的Promise对象会被解析,其结果为一个包含每个输入Promise的结果的数组。如果任何一个输入Promise对象被拒绝,那么返回的Promise对象会立即被拒绝,其原因为第一个拒绝的Promise对象的原因。
相关问题
手写一个Promise.all
好的,下面是手动实现的 `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` 对你有所帮助!如果还有其他问题,请随时提问。
写一个promise.all
Promise.all 是一个方法,接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。当所有 Promise 都成功时,返回的 Promise 对象才会成功,返回值是所有 Promise 对象的 resolve 结果数组;当有任意一个 Promise 失败时,返回的 Promise 对象就会失败,返回值是第一个失败的 Promise 的 reject 结果。
下面是一个简单的 Promise.all 实现:
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
if (promises.length === 0) {
resolve(results);
return;
}
for (let i = 0; i < promises.length; i++) {
promises[i].then(result => {
results[i] = result;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch(error => {
reject(error);
});
}
});
}
```
使用方法:
```javascript
const promises = [Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)];
promiseAll(promises)
.then(results => {
console.log(results); // [1, 2, 3]
})
.catch(error => {
console.error(error);
});
```
阅读全文