我正在使用rx
创建一个自动完成框。这是我的代码:
let input = document.getElementById('input');
var keypresses = Observable.fromEvent(input, 'keyup');
var searchResults = keypresses.
throttle(100).
map(key => {
return getResults(input.value);
}).
switchLatest();
let results = document.getElementById('results');
searchResults.forEach(resultSet => results.value = resultSet);
这是对http
的{{1}}来电。如果我在wikipedia
之间等待throttle
,我希望100 ms
仅发送数据,但它会向每个keyup
发送http
个请求。< / p>
您可以在keyup
中看到它与每个image
进行单独通话。
我做错了什么?如何让keypress
做我期望的事情?
答案 0 :(得分:4)
您正在寻找Rx.Observable.prototype.debounce
吗?参看https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md。
它说:Ignores values from an observable sequence which are followed by another value within a computed debounced duration.
真相debounce
和throttle
很容易混淆,希望它正是您所寻找的。在Rxjs 2中,语义实际上是相反的,因此请检查您使用的版本和相应的文档。
实际上,您也可以在此处查看debounce
与Rxjs进行自动完成的示例:https://github.com/Reactive-Extensions/RxJS/blob/master/examples/autocomplete/autocomplete.js