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

标签 javascript promise redux-saga

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/

相关文章:

reactjs - 通过 componentDidMount 中的 props 设置状态时出现问题

javascript - 如何使 @connect 装饰器与 redux-saga 一起工作?

javascript - 如何检查访问麦克风的权限是否已被 FireFox 中的用户拒绝

javascript - 仅处理 promise 错误的正确方法是什么?

javascript - 从右侧滑入 div

node.js - Bluebird - 如何尽早打破 promise 链

javascript - 在 componentDidMount() 中使用 React.setState 来获取嵌套 Promise 中返回的数据?

node.js - 是否可以在 Node 中为没有 catch block 的 Promise 编写一个 Jest 单元测试?

javascript - Angular 2 可观察到的问题

javascript - Three.js - 沿 X 轴操纵宽度