多选时点击下载,是用foreach去请求接口,还是使用promise.all
时间: 2024-03-03 14:49:40 浏览: 115
如果多选时点击下载,需要依次请求多个接口并且保证所有接口请求完成后再进行下一步操作,建议使用`Promise.all`。
`Promise.all`可以并行地发起多个异步请求,等待所有请求都完成后再返回结果,这样可以大大提高请求的效率。而使用`Array.forEach`则是依次执行每个异步请求,等待上一个请求完成后才会发起下一个请求,性能较差。
下面是使用`Promise.all`的示例代码:
```javascript
// 假设selectedData是一个包含多个选中数据的数组
const promises = selectedData.map(data => fetch(`api/data?id=${data.id}`));
Promise.all(promises)
.then(responses => Promise.all(responses.map(response => response.blob())))
.then(blobs => {
// 所有数据都已下载完成,可以进行下一步操作
})
.catch(error => {
// 发生错误
});
```
以上示例代码中,首先使用`Array.map`方法将选中数据数组转换为多个异步请求的Promise数组,然后使用`Promise.all`方法并行地发起所有请求。当所有请求都完成后,使用`Promise.all`方法将返回的Response数组转换为Blob数组。最后,可以在第二个`then`方法中对所有数据进行下一步操作。如果发生错误,可以在`catch`方法中进行处理。
阅读全文