我需要一个解决方案,从3个不同的API调用返回一个单一的承诺。目前正在通过rxjs epics运行3个不同的API调用,并希望在所有3个调用完成后返回一个单个promise对象。在理解如何使用Promise.all()以及在哪里调用它时遇到问题。我认为类似于Promise.all()的是forkJoin()。我有一些我正在使用的史诗的例子的虚拟数据。这一切都发生在React中。有人能提供一个如何在React中使用Promise.all()或forkJoin与epics的深入示例吗?
谢谢
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个调用组合在一起。
发布于 2019-05-30 00:02:04
你调查forkJoin是对的。
以下是您的示例的粗略重写:
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版本,因此建议升级或至少使用中的。
希望这能有所帮助
https://stackoverflow.com/questions/56346388
复制相似问题