foreach 循环调取接口 使用Promise.all解决bug
时间: 2023-06-15 19:04:16 浏览: 112
foreach 循环调用接口会有异步请求的问题,可能会导致数据顺序错乱或者出现其他问题。为了解决这个问题,可以使用 Promise.all 来处理异步请求。
Promise.all 可以接收一个由 Promise 对象组成的数组作为参数,当所有的 Promise 对象都成功执行时,Promise.all 才会返回一个成功的 Promise 对象;如果其中任意一个 Promise 对象失败,Promise.all 就会返回一个失败的 Promise 对象。
下面是一个使用 Promise.all 解决异步请求问题的示例代码:
```
const ids = [1, 2, 3, 4, 5];
const promises = [];
ids.forEach(id => {
const promise = fetch(`/api/data/${id}`).then(response => response.json());
promises.push(promise);
});
Promise.all(promises)
.then(results => {
console.log(results);
})
.catch(error => {
console.log(error);
});
```
在上面的代码中,我们使用 forEach 循环遍历了一个包含 5 个数据 id 的数组,然后将每个 id 传递给 fetch 函数发起异步请求,将返回的 Promise 对象添加到 promises 数组中。最后使用 Promise.all 来处理这些 Promise 对象,当所有的 Promise 对象都成功执行时,Promise.all 返回一个包含所有结果的数组。如果其中任意一个 Promise 对象失败,Promise.all 就会返回一个失败的 Promise 对象。
这样使用 Promise.all 可以保证所有异步请求都成功执行并按顺序返回结果,避免了因为异步请求导致数据顺序错乱或者出现其他问题。
阅读全文