首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在React.js中对rxjs epics使用Promise.all()

在React.js中对rxjs epics使用Promise.all()
EN

Stack Overflow用户
提问于 2019-05-29 00:17:53
回答 1查看 357关注 0票数 0

我需要一个解决方案,从3个不同的API调用返回一个单一的承诺。目前正在通过rxjs epics运行3个不同的API调用,并希望在所有3个调用完成后返回一个单个promise对象。在理解如何使用Promise.all()以及在哪里调用它时遇到问题。我认为类似于Promise.all()的是forkJoin()。我有一些我正在使用的史诗的例子的虚拟数据。这一切都发生在React中。有人能提供一个如何在React中使用Promise.all()或forkJoin与epics的深入示例吗?

谢谢

代码语言:javascript
复制
  action$.ofType(GET_PROMISE).mergeMap(
    action =>
      action.payload.search_location === undefined ||
      action.payload.search_location.length === 0 ||
      action.payload.search_location === "" ||
      stateRegex.test(action.payload.search_location.toLowerCase()) === true
      ? api
         .fetchPromise(action.payload)
         .map(
           payload =>
           payload.value === undefined || payload.value.length === 0
                 ? getPromiseFail()
                 : getPromiseSuccess(payload)
           )

现在,当我拿回promise对象时,我正在更新状态,并将该数据与来自2个不同API调用的另外两个promise连接起来。因为它们是异步的,所以它们会在不同的时间返回。因此,在web应用程序中显示任何数据之前,我想将所有3个调用组合在一起。

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 00:02:04

你调查forkJoin是对的。

以下是您的示例的粗略重写:

代码语言:javascript
复制
action$.ofType(GET_PROMISE).mergeMap(
  action =>
    // wait for all three fetches to complete
    forkJoin(
      api.fetchOne(action.payload),
      api.fetchTwo(action.payload),
      api.fetchThree(action.payload)
    )
    // now we have all three results as an array here:
    .map(([one, two, three]) => {
      // turn those results into an action
      return getPromiseSuccess(one, two, three)
    })
)

请注意,您分享的代码似乎使用了过时的RxJS版本,因此建议升级或至少使用中的。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56346388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档