Я пытаюсь понять rxjs и застрял в эксперименте debounceTime(n /* ms */)
.debounceTime() над вызовами API с использованием Rxjs
общественного debounceTime (dueTime: номер, планировщик: Планировщик): Наблюдаемое
Выдает значение из источника наблюдаемого только после того, конкретный промежуток времени прошло без другого источника излучения.
Мой код:
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 link
Я не ясно, с 4-ем точкой, что я наблюдал был, (мой код) ведет себя точно так же, как задержка (n). Это потому, что если вызов «.subscribe» выполняется над наблюдаемым, он будет рассматриваться как новая подписка? поэтому, если у меня есть наблюдатель, наблюдающий значение вызова API, смогу ли я получить такие же результаты? –
@Amresh Venugopal, пожалуйста, перефразируйте, я не понимаю –
Если вызов .subscribe сделан один раз наблюдателю, только тогда будет ли debounce (n) работать один раз за N кликов за заданные n секунд, согласно моему ожиданию? –