在 redux
内传奇我正在向不同的系统发送六个获取请求。我想等到所有这些请求返回,然后对结果进行一些最终处理。
为此,我有一个数组 promises
,代表每个查询。我可以调用Promise.all()
在数组上,但这会导致 saga 挂起,因此所有事件都挂起,直到 promise 返回。
我尝试创建一个 async promise
那个叫 promise.all
,然后使用 redux-effects
呼唤那个 promise ,但这也挂了。
我怎样才能保留 async
等待 promise 回归时我的传奇的本质?
最佳答案
要并行运行所有请求,您应该使用 all
效果来自 redux-saga
.它类似于 Promise.all
您已经引用的方法。
例子:
import { fetchCustomers, fetchProducts } from './path/to/api'
import { all, call } from `redux-saga/effects`
function* mySaga() {
const { customers, products } = yield all({
customers: call(fetchCustomers),
products: call(fetchProducts)
});
// do something with results
}
这是并行运行异步操作的最直接的方法并等待所有进程完成 .这种方法将不是 阻止javascript事件循环。它只会阻止生成器函数的其余部分运行。其他 sagas 中的其他操作和其他事件(例如点击)在请求进行时仍会被您的应用程序接收。
请引用官方docs了解更多信息。
关于javascript - 如何在 Saga 中异步加入 Promises 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859486/