Вот грубый пример, основанный на вашем коде.Запишите журнал и попробуйте поиграть с таймингами для debounceTime
и delay
, чтобы увидеть, как это влияет на поведение:
var { timer, fromEvent, of } = rxjs;
var { debounceTime, map, switchMap, delay, tap } = rxjs.operators;
var theInput = document.getElementById('the-input');
fromEvent(theInput, 'input').pipe(
map(e=>e.target.value) // read value from input
, tap(console.info) // realtime input log
, debounceTime(1000) // time till reaction
// mocking long server request {{{
, switchMap(q => of(q.toUpperCase()).pipe(
tap(q => console.info('[requested]', q)),
delay(2000), // server ping time
tap(q => console.info('[returned]', q))
))
// }}}
).subscribe(res => {
console.log('Result is: ' + res);
});
<script src="https://unpkg.com/rxjs@6.4.0/bundles/rxjs.umd.min.js"></script>
<input
id="the-input"
type="text"
placeholder="Start typing"
/>