如何解决具有vue-rx / rxjs的VUE:如何使用$ watchAsObservable使用过滤器和间隔创建订阅
在以下vue-rx / RxJs问题中,我需要帮助。
我必须在vue-rx中进行订阅以监视道具值,当该订阅为true时,它将每500 ms调用一次http请求,并在该请求为false或返回值为'时停止它。已完成”。
我尝试过这样的事情:
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位)。
我假设this.$watchAsObservable('started')
和pluck('newValue')
是true
和false
的流? (反映了started
道具的价值)
如果是这样,我将使用switchMap在时间间隔/计时器之间切换,而不进行任何操作。
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')
)
)
第二个switchMap的效果是,如果一次呼叫花费500毫秒以上才能完成,它将被丢弃,您将永远看不到结果。如果不满足takeWhile()
条件,这也将取消订阅-因此,您必须更改它以满足您的特定要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。