【发布时间】:2019-04-16 09:25:44
【问题描述】:
我一直在想是否可以安全地假设在使用 tap 操作符之后,它内部的副作用已经完成。
我的用例是ngrx。
...
tap(() => {
this.store.dispatch(new SetValue("Hello World"));
}
}),
switchMap(() => this.store),
select(state => state.value),
tap(state => {
if (state === undefined) {
throw new Error("Couldn't find value");
}
})
SetValue是一个实现ngrx的类
export class SetValue implements Action {
readonly type = SET_VALUE;
constructor(public payload: string) {}
}
我正在尝试实现的是在商店中设置一个值,然后检查它是否已有效设置。
我可以假设在点击操作符之后调度已经完成吗?
回答
我在 Angular Router guards 上使用它通过 url 上的参数设置初始状态,所以我最终过滤为仅在商店有新值时继续
...
tap(() => this.store.dispatch(new SetValue("Hello World"))),
switchMap(() => this.store),
select(state => state.value),
filter(value => value === "Hello World"),
take(1)
【问题讨论】:
-
我对我的代码的思考过于迫切,我对任何遇到此问题的人的建议是鼓励反应式编程,考虑蒸汽以及何时发送数据
标签: rxjs ngrx rxjs5 rxjs6 ngrx-store