将一系列嵌套承诺转换为@Effect



有没有办法将一组嵌套的异步承诺转换为@Effect?

我有一个使用多个异步 http 调用的事务,我必须在进入下一步之前等待结果,任何错误都会中止事务并向用户发送错误消息。

我对 rxjs 相当陌生,似乎我可以得到与"承诺......然后",但我不确定如何做到这一点并捕获沿途的错误。

我的目标是将整个事务(当前在服务中(移动到 ngrx @Effect。

假设ab是可观察量,那么您可以等待所有可观察量使用 forkJoin 方法重新确定。

Rx.Observable.forkJoin([a,b]).subscribe(result=> {
var resultA = result[0];
var resultB = result[1];
});

首先,我会做多个效果,每个效果都会发送一个新动作。它只是更容易理解,你可以在reduce-devtools中获得一个日志。

@Effect()
public makeFirstRequest = this.actions.pipe(
ofType<InitialAction>(ActionTypes.InitialAction),
switchMap(action => this.myService.firstRequest(action.param)),
map(response => new FollowUpAction(response))
);
@Effect()
public makeSecondRequest = this.actions.pipe(
ofType<FollowUpAction>(ActionTypes.FollowUpAction),
switchMap(action => this.myService.secondRequest(action.param)),
map(response => new NextAction(response))
);
// and so on...

这样,它首先执行InitialAction并发出请求,一旦请求完成,它就会执行FollowUpAction。您可以将响应作为下一个操作的参数传递。请记住,您不必将响应传递给下一个操作。您可以对响应执行任何操作,并使用您喜欢的任何参数(或无参数(调度新操作。

我不确定这是否包含在您的问题中,但您需要可观察量而不是投影。如果您确实使用了承诺,则可以简单地使用rxjs提供的from(myPromise)将其映射到可观察量中。

我不确定我是否真的理解你的问题,但似乎你可以用Promise.all()将一系列承诺变成一个承诺,然后可以在你的@Effects中使用。 参见 Promise.all(( 定义

最新更新