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

时间:2018-09-28 13:33:19

标签: angular rxjs ngrx

是否可以将一组嵌套的异步诺言转换为@Effect?

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

我对rxjs相当陌生,似乎我可以通过exhaustMap获得与“ Promise ... then”相同的操作,但是我不确定如何做到这一点并捕获错误。办法。

我的目标是将整个交易(当前在服务中)移至ngrx @Effect。

3 个答案:

答案 0 :(得分:1)

让我们假设java.util.HashMapHashMap => JHashMap是可观察的,那么您可以等待使用https://github.com/facebook/react-native/issues/4968方法重新获得所有可观察的观测值。

a

答案 1 :(得分:0)

我不确定我是否真的了解您的问题,但是似乎您可以使用Promise.all()将一个Promise集合成一个Promise,然后可以在您的@Effects中使用。 See Promise.all() definition

答案 2 :(得分:0)

首先,我将执行多个效果,每个效果都会调度一个新动作。更加容易理解,您会在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。您可以将响应作为下一个动作的参数传递。请记住,您不必将响应传递给下一个动作。您可以对响应做任何您想做的事,并使用您喜欢的任何参数(或没有参数)来调度新动作。

我不确定这是否包含在您的问题中,但您需要观察到的东西而不是pro悔的东西。如果您确实使用了承诺,则只需使用from(myPromise)提供的rxjs即可将其映射到可观察对象中。