bub*_*ble 5 effects rxjs ngrx angular
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()))
)
)
);
Run Code Online (Sandbox Code Playgroud)
首先,我可以使用switchMap或mergeMap。我相信不同之处在于,如果多次触发此效果,那么如果我使用switchMap,而没有使用mergeMap,则所有正在进行的请求都将被取消。
在分派多个动作方面,以下所有工作:
以下内容不起作用:
前三个选项之间有什么区别?http请求之后,mergeMap和switchMap怎么样?为什么最后一个选项不起作用?
这个问题可以分为几个部分:
+) mergeMap 和 switchMap 的区别:
合并地图 = 地图 + 合并所有。它将数据流映射到 observable 流,每次内部 observable 发出一个值时,外部 observable 将收集所有发出的值并将其合并到一个新的流中。
switchMap,非常相似,但正如你可以告诉它“切换”,即如果下一个内部 observable 发出一个新值,则前一个被取消(一次一个内部 observable)。
+) mergeMap 和 switchMap 之间的相似性:它们都可以将任何类似流的对象转换为可观察对象。
+) 您的代码之间的区别:
return [action1, action2] 确实使 switchMap(() => ...) 类似于 from([action1, action2]),即从数组创建一个可观察对象。
return from([action1, action2]),这是一个内部 observable,它发出 2 个动作,并且 switchMap 将这些动作合并回其流。
return of(action1, action2) = from([action1, action2])
然而, return of([action1, action2]) 会创建一个发出单个值的 observable,该值是一个数组,并且您不能调用 store.dispatch(array_of_actions)
| 归档时间: |
|
| 查看次数: |
1398 次 |
| 最近记录: |