VUE with VUE rx/rxjs:如何使用筛选器和间隔创建$watchAsObservable订阅

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')

我需要以下vue rx/RxJs问题的帮助

我必须在vue rx中订阅一个监视props值的命令,当该命令为真时,它会每隔500毫秒调用一个http请求,当该命令为假时,或当返回值为“完成”时,停止该命令

我试过这样的方法:

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')
with
pulk('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,它就像一个符咒!只有一个“)”不见了。