如何在Saga中异步加入Promises集合?

dso*_*len 2 javascript promise redux-saga

在一个redux传奇中,我向不同的系统发送了六次获取请求。我要等所有这些请求返回后,再对结果进行最后的处理。

为此,我有一个数组promises,代表每个查询。我可以调用Promise.all()该数组,但这将导致传奇挂起,从而所有事件挂起,直到promise返回。

我尝试创建一个async promisethat promise.all,然后redux-effects在该promise上使用Call,但是这也挂了。

async在等待诺言归来时,我如何保持我传奇的本性?

tpd*_*etz 6

要并行运行所有请求,您应该使用中的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
}
Run Code Online (Sandbox Code Playgroud)

这是并行运行异步操作并等待所有进程完成的最直接的方法。这种方法不会阻止javascript事件循环。它只会阻止生成器功能的其余部分运行。在请求进行期间,您的应用程序仍会收到其他Sagas中的其他操作以及其他事件(例如点击)。

请参考官方文档以获取更多信息。