我可以使用一些幫助。我試圖在我的按鈕的鼠標中啓動我的ajax請求的實驗,但只有在用戶單擊時纔會消耗該請求的結果(或者當用戶單擊時請求還沒有完成,將結果作爲就這樣)。如果用戶離開按鈕而不點擊,則該請求應該被取消。Trxy蒸汽可觀察合併在rxjs
我卡在哪裏是如何合併點擊流和請求流。我無法使用withLatestFrom,因爲如果請求在點擊後完成,它將不會被使用。我也不能使用combineLatest,因爲如果在過去發生任何點擊,那麼請求將被消耗,即使我現在只是在閒逛。 會喜歡一些指導。這是一個有趣的問題來思考,但我堅持
const fetchContent = (url) => {
const timeDelay$ = Rx.Observable.timer(1000); // simulating a slow request
const request$ = Rx.Observable.create(observer =>
fetch(url, { mode: 'no-cors' })
.then(json => {
observer.onNext('res')
observer.onCompleted()
})
.catch(e => observer.onError())
)
return timeDelay$.concat(request$)
}
const hover$ = Rx.Observable.fromEvent(myButton, 'mouseenter')
const leave$ = Rx.Observable.fromEvent(myButton, 'mouseleave')
const click$ = Rx.Observable.fromEvent(myButton, 'click')
const hoverRequest$ = hover$
.flatMap(e =>
fetchContent(e.target.getAttribute('href'))
.takeUntil(leave$.takeUntil(click$))
)
const displayData$ = click$
.combineLatest(hoverRequest$)
displayData$.subscribe(x => console.log(x))
聽起來像'trial.js'庫所做的事情。參看https://github.com/MarkoCen/trial-js。不知道他們是否使用rxjs。 – user3743222
感謝您的評論!我會看看它。作爲一個實驗,我更加努力地構建出來。 – user2689931