VUE with VUE rx/rxjs:如何使用筛选器和间隔创建$watchAsObservable订阅
我需要以下vue rx/RxJs问题的帮助 我必须在vue rx中订阅一个监视props值的命令,当该命令为真时,它会每隔500毫秒调用一个http请求,当该命令为假时,或当返回值为“完成”时,停止该命令 我试过这样的方法:VUE with VUE rx/rxjs:如何使用筛选器和间隔创建$watchAsObservable订阅,rxjs,rxjs-observables,vue-rx,Rxjs,Rxjs Observables,Vue Rx,我需要以下vue rx/RxJs问题的帮助 我必须在vue rx中订阅一个监视props值的命令,当该命令为真时,它会每隔500毫秒调用一个http请求,当该命令为假时,或当返回值为“完成”时,停止该命令 我试过这样的方法: export default { props: ['started'], subscriptions() { return { currentHttpState: this.$watchAsObservable('started')
export default {
props: ['started'],
subscriptions() {
return {
currentHttpState: this.$watchAsObservable('started')
.pipe(pluck('newValue'),filter(value => value === false))
.switchMap(() => interval(500).pipe(switchMap(() => this.callHttpRequest()),distinctUntilChanged())),
谢谢你的帮助 我对vue(或vue rx)不太熟悉,因此这可能只是答案的一半(RxJS位) 我假设
这个。$watchAsObservable('started')
withpulk('newValue')
是一个true
和false
流?(反映启动的道具的值)
如果是这样,我将使用switchMap在间隔/计时器和nothing之间切换
currentHttpState: this.$watchAsObservable('started').pipe(
pluck('newValue'),
map(val => val? timer(0,500) : EMPTY),
switchMap(timer$ => timer$.pipe(
switchMap(_ => this.callHttpRequest()),
takeWhile(result => result.status !== 'COMPLETED')
)
)
第二个开关映射的效果是,如果一个调用需要500毫秒以上才能完成,它将被丢弃,而您将永远看不到结果。如果未满足takeWhile()
条件,也会取消订阅,因此您必须更改该条件以满足您的特定要求。谢谢Mrk Sef,它就像一个符咒!只有一个“)”不见了。