asynchronous - ngrx 效应 - 等待外部数据
问题描述
我有一个效果,当用户下载并存储在状态时运行:
getMetadata$ = createEffect(() => {
return this.actions$.pipe(
ofType(fromUserSelectors.getUserSuccess),
concatLatestFrom(() => this.store.select(fromProductSelectors.selectProduct)),
exhaustMap(([user, product]) =>
// do something with user and product
)
);
});
getUserSuccess
派发时会触发此效果。
但是,您可以在第 4 行看到,我还需要存储在不同商店中并与正在下载的用户异步下载的产品。所以它不一定会在以后填充。
我怎样才能告诉这种效果在恢复之前等待产品填充?我不想重新触发效果。我以为这是concatLatestFrom
ngrx v12引入的目的,但也许我误解了。
我知道我可以在我的ofType
通话中收听多个动作并收听fromProductSelectors.getProductSuccess
,但我只希望此效果在getUserSuccess
被调用时运行,而不是fromProductSelectors.getProductSuccess
太多,但需要selectProduct
不未定义。
解决方案
您可以使用filter
运算符等待它可用。
getMetadata$ = createEffect(() => {
return this.actions$.pipe(
ofType(fromUserSelectors.getUserSuccess),
concatLatestFrom(() => this.store.select(fromProductSelectors.selectProduct).pipe(filter(x => !!x)),
exhaustMap(([user, product]) =>
// do something with user and product
)
);
});
推荐阅读
- karate - 如何使用功能文件在空手道中实现 for 循环
- java - ANDROID中Intent的GetStringExtras默认值是多少?
- vue.js - 在 service-worker 中使用 vue store
- c - 在c中初始化一个扫雷艇
- html - 在 html 中嵌入 pdf:gview 和简单 iframe 之间的区别
- javascript - Three.js/WebGL 可以渲染用 Adobe Illustrator 制作的复杂 SVG 吗?
- tensorflow - 导入 TensorFlow 包失败
- python - 如何分离 sklearn kneighbors() Python 的 2 个输出数组?
- c# - 将画布夹在球体上
- css - Boostrap 4:使 textarea 匹配列高