遍历 return new Promise
时间: 2023-08-15 12:11:05 浏览: 52
遍历一个数组并返回一个Promise对象可以使用以下代码:
```
function traverseArray(array) {
let promises = [];
for (let i = 0; i < array.length; i++) {
promises.push(new Promise((resolve, reject) => {
// 在这里进行异步操作,最终调用 resolve 或 reject
}));
}
return Promise.all(promises);
}
```
这里使用了`Promise.all`方法,可以等待所有Promise都完成后再返回。在循环中,每个元素都被推入一个Promise对象,并添加到`promises`数组中。在每个Promise对象的构造函数中,可以进行异步操作,并在最终完成时调用`resolve`或`reject`。
相关问题
实现Promise.all
以下是实现Promise.all的示例代码:
```javascript
function myPromiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
promises.forEach((promise, index) => {
promise.then(res => {
results[index] = res;
count++;
if (count === promises.length) {
resolve(results);
}
}).catch(err => {
reject(err);
});
});
});
}
```
这段代码实现了一个名为myPromiseAll的函数,它接收一个包含多个Promise对象的数组作为参数。该函数会返回一个新的Promise对象,该Promise对象会在所有传入的Promise对象都成功解析后才会被解析,如果有任何一个Promise对象被拒绝,则返回的Promise对象会被拒绝。
在函数内部,我们使用了一个results数组来保存每个Promise对象的解析结果,使用count变量来记录已经解析的Promise对象的数量。通过遍历传入的Promise对象数组,我们对每个Promise对象调用then方法来处理其解析结果。当所有的Promise对象都解析完成时,我们使用resolve方法将results数组作为参数解析出去。如果有任何一个Promise对象被拒绝,我们则使用reject方法将错误信息传递出去。
使用示例:
```javascript
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 1 resolved');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 2 resolved');
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise 3 resolved');
}, 3000);
});
myPromiseAll([promise1, promise2, promise3])
.then(results => {
console.log(results);
})
.catch(err => {
console.error(err);
});
```
这段代码创建了三个Promise对象,并将它们作为参数传递给myPromiseAll函数。当所有的Promise对象都成功解析后,结果数组会被打印出来。如果有任何一个Promise对象被拒绝,错误信息会被打印出来。
Promise.all 实现
Promise.all 是一个将多个 Promise 实例包装成一个新的 Promise 实例的方法,当所有的 Promise 实例都成功时,返回的新 Promise 实例才会成功,其中一个失败则返回的新 Promise 实例也会失败。
以下是 Promise.all 的实现:
```javascript
function promiseAll(promises) {
return new Promise((resolve, reject) => {
let results = [];
let count = 0;
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);
});
}
});
}
```
该实现中,我们创建了一个新的 Promise 实例,并在该实例中遍历传入的 Promise 实例数组,将每个 Promise 实例的结果存储在一个数组中。当所有的 Promise 实例都成功时,我们将存储结果的数组作为参数传递给 resolve 函数,使得返回的新 Promise 实例也成功。如果其中一个 Promise 实例失败,则直接调用 reject 函数,使得返回的新 Promise 实例也失败。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)