【发布时间】:2018-07-02 23:44:13
【问题描述】:
我是 RxJs 新手,无法以“RxJs 方式”实现这一目标:
无限流a$ 会偶尔发出一个值a。
async() 接受a 并执行异步操作。
如果a$ 在async 处于挂起状态时发出值,则只保留最新的al。
前一个async完成后,如果有al,运行async(al)。
等等。
a$:----a1----------a2----a3-----------------------a4-----------
async(a1):------------end async(a4):---
async(a3):-----end
这是我想出来的,有点讨厌:
var asyncIdle$ = new Rx.BehaviorSubject()
var asyncRunning$ = new Rx.Subject()
var async$ = asyncIdle$
function async (val) {
async$ = asyncRunning$
// do something with val
console.log(val + ' handling')
setTimeout(() => {
console.log(val + ' complete')
async$.next()
async$ = asyncIdle$
}, 2000)
}
// simulate a$
var a$ = Rx.Observable.fromEvent(document, 'click')
.mapTo(1)
.scan((acc, curr) => acc + curr)
.do(val => console.log('got ' + val))
a$.debounce(() => async$)
.subscribe(val => {
async(val)
})
【问题讨论】:
-
我的直觉反应说 ReplaySubject 可能对此有好处,但我需要更多地考虑它。这是 ReplaySubject 文档 FWIW 的链接:reactivex.io/rxjs/class/es6/ReplaySubject.js~ReplaySubject.html
-
@vincecampanale 谢谢!我会调查的
标签: javascript rxjs observable rxjs5 reactive