javascript - 如何使`shared` Observable 允许触发第二个 observable 一次而不是每次发射?
问题描述
我有一个可观察的源,用于 WS 连接。那个连接被打开了onMount
。最重要的是,我触发另一个 observableonMount
以允许 LoadingIndicator 屏幕,直到数据到达。我希望该指标一直存在,直到数据从源 observable 发出,我已经这样做了。
const mount$ = action$.pipe(Type.ON_MOUNT);
const source$ = mount$.pipe(
... // Stuff happen here..
share()
);
const setSuccess$ = source$.pipe(
map(() => ({ type: Type.SET_LOADING, payload: false }))
);
const setLoading$ = mount$.pipe(map(() => ({ type: Type.SET_LOADING, payload: true })));
return merge(source$, setLoading$, setSuccess$);
然后,我有setSucccess
observable,它正在监听source
observable 发射,并设置isLoading
为 false。这就是问题所在。每次排放都会发生这种情况。我希望这仅发生在第一个上。我怎样才能做到这一点?
我尝试了一些不同的东西。我试过了shareReplay({ refCount: true, bufferSize: 1 })
,但没有任何效果。我怎样才能只发出第二个共享的 observable (setSuccess$) 一次?take(1)
setSuccess$
解决方案
你不需要setLoading$
从 mount$
. 它最初处于加载状态,因此您可以
return merge(source$, of({ type: Type.SET_LOADING, payload: true }), setSuccess$.pipe(take(1)));
推荐阅读
- r - R中的正则表达式帮助 - 在每次出现数字(点)数字后拆分字符串
- amazon-cloudformation - 如何避免 s3 存储桶 ObjectOwnership 上的 AWS 堆栈漂移误报?
- google-apps-script - 如何循环API的页码?
- android - 片段中的 Gif (AnimatedImageDrawable) Android
- c++ - RcppArmadillo 和头文件
- java - 如何设置标记标签的文本
- css - mergeStyles 不能是父级(按类)的子级(按 id)
- ethereum - 反应应用程序内部 JsonRPCProvider 的 Ethers Provider CORS 错误
- java - 从文件读取到链接列表时如何添加空格字符?
- fabric8 - Fabric8 customResourceDefinitions 测试