![](/img/trans.png)
[英]Using RXJS for a Search input that makes an API call but the subscribe happens repeatedly even with a debounceTime
[英]debounceTime() over API calls using Rxjs
我试图了解rxjs并陷入debounceTime debounceTime(n /* ms */)
实验。
公共debounceTime(dueTime:数字,调度程序:调度程序):可观察
仅在经过特定时间间隔后才发出源Observable的值,而不会发出其他源信号。
我的代码:
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链接
根据文档,如果有新值到达源,则debounceTime(n)应该丢弃先前的未决延迟发射。
的确如此,但是每次点击:
debounceTime
等待10S(什么都不会发生,因为observerable
由归国fakeObserver
发射只有一次) 您需要将点击转化为可观察的,以实现所需的功能:
Rx.Observable.fromEvent(document.getElementById('buttonText'), 'click')
检查jsBin
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.