我正试图理解rxjs,并被困在debounceTime(n /* ms */)实验中。
公共debounceTime(dueTime: number,调度程序:调度程序):可观察 只在某一特定时间跨度过去而没有另一源发射时,才能从源发出一个值。 来源
我的代码:
function fakeAPI() {
return new Rx.Observable(observer => {
const root = 'https://jsonplaceholder.typicode.com'
$.ajax({
url: root + '/posts/1',
method: 'GET'
}).then(function(data) {
observer.next(data)
}).fail(function(err) {
observer.error(err)
})
return ()=>{
observer.complete()
console.log('unsubscribed!')
}
})
}
const fakeObserver = fakeAPI()
$('#buttonText').click(()=>{
fakeObserver
.debounceTime(10000)
.subscribe(() => {
return {
next(item) {
console.log('received: ', item.id)
},
error(err) {
console.log('error:', err)
},
complete() {
console.log('completed!')
}
}
}());
})我的期望是:即使在给定的时间内点击N次,API调用也只能进行一次。相反,它似乎在等待给定的时间,然后所有的N次点击都会产生一个API调用。
我做错了什么?
根据文档,如果源上有一个新值,那么debounceTime(n)应该丢弃先前待处理的延迟排放。
这是一个JSBin链路
发布于 2016-12-26 14:25:02
根据文档,如果源上有一个新值,那么debounceTime(n)应该丢弃先前待处理的延迟排放。
这是真的,但每次单击时:
debounceTime等待10 s(什么都不会发生,因为fakeObserver返回的observerable只发射一次)您需要在“可观察”中转换您的单击,以实现所需的内容:
Rx.Observable.fromEvent(document.getElementById('buttonText'), 'click')检查jsBin
https://stackoverflow.com/questions/41332419
复制相似问题