我的回答
可以使用redux-thunk, 然后使用Promise.all().then()
参考回答
使用 redux-saga
redux-saga 是一个管理 redux 应用异步操作的中间件,用于代替 redux-thunk 的。
它通过创建 Sagas 将所有异步操作逻辑存放到一个地方进行集中处理,以此将 react 中的同步操作与异步操作区分开来,以便后期的管理与维护。
redux-saga 如何处理并发:
- takeEvery,可以让多个 saga 任务并行被 fork 执行 ```javascript import { fork, take } from “redux-saga/effects”;
const takeEvery = (pattern, saga, …args) => fork(function* () { while (true) { const action = yield take(pattern); yield fork(saga, …args.concat(action)); } });
- takeLatest, takeLatest不允许多个saga任务并行的执行。一旦接收到新的发起的action,它就会取消前面所有fork过的任务(如果这些任务还在执行的化)。在处理ajax请求的时候,如果我们只希望获取最后那个请求的响应,takeLatest就会非常有用
```javascript
import { cancel, fork, take } from "redux-saga/effects";
const takeLatest = (pattern, saga, ...args) =>
fork(function* () {
let lastTask;
while (true) {
const action = yield take(pattern);
if (lastTask) {
yield cancel(lastTask); // 如果任务已经结束,则 cancel 为空操作
}
lastTask = yield fork(saga, ...args.concat(action));
}
});