[英]Dispatch multiple actions from effects: difference between different rxjs operators
一旦http請求成功,我需要從ngrx效果中分派多個動作。
有幾種方法似乎有效,有些方法沒有,我無法理解有什么區別。
@Effect()
loadUser = this.actions
.pipe(
ofType(campaignActions.type.LOAD_CAMPAIGN),
map((action: userActions.LoadUserAction) => action.payload),
switchMap((payload: { id: number }) =>
this.s.getUser(payload.id)
.pipe(
switchMap((data) => {
return from([
new userActions.LoadUserSuccessAction(),
new userActions.SomethingElseSuccessAction()
]);
}),
catchError(() => of(new userActions.LoadUserFailureAction()))
)
)
);
首先,我可以使用switchMap或mergeMap。 我認為不同之處在於,如果多次觸發此效果,如果我使用switchMap,則會取消任何正在進行的請求,如果我使用mergeMap則不會取消。
在分派多個動作方面,以下所有工作:
以下不起作用:
所有前3個選項有什么區別? 在http請求之后mergeMap與switchMap怎么樣? 為什么最后一個選項不起作用?
這個問題可以分為幾個部分:
+)mergeMap和switchMap之間的區別:
mergeMap = map + mergeAll。 它將數據流映射到可觀察流,並且每次內部observable發出值時,外部將收集所有發出的值並將其合並到新流中。
switchMap ,非常相似,但正如你可以告訴它“開關”,即如果下一個內部observable發出一個新值,前一個被取消(一次內部可觀察)。
+)mergeMap和switchMap之間的相似性:它們都可以將任何類似流的對象轉換為可觀察對象。
+)您的代碼之間的差異:
return [action1,action2]確實使switchMap(()=> ...)類似於from([action1,action2]),即從數組創建一個observable。
從([action1,action2])返回,這是一個內部observable,它發出2個動作,switchMap將這些動作合並回它的流。
從([action1,action2])返回(action1,action2)=
但是,返回([action1,action2])會創建一個發出單個值的observable,這是一個數組,你不能調用store.dispatch(array_of_actions)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.