我使用angular4和RxJS
基本假设是:当用户在文本字段中输入单个字母时,我触发一些getData()函数(keyup事件),获取数据并显示在文本字段下面
我想在用户输入一个字母之后立即触发该功能并立即获取数据,但是让他输入完整的短语,等待例如300毫秒,最后触发该功能,获取数据并显示
所以我希望实现的流程类似于:
myService.getDataAsObservable
.whatToDoHere?
.subscribe(data => ...handle and display the data...);
一个解决方案是将它全部包装到setTimeout()中,但在observables的样式中流畅地执行它会好得多
我曾经看过这个问题的解决方案,但再也找不到了..
谢谢!
答案 0 :(得分:3)
您需要使用debounce
运算符:
myService.getDataAsObservable
.debounce(300)
.subscribe(data => ...handle and display the data...);
以下是视觉说明:
var someObservable = getDataAsObservable('---x---x---x---|');
var someDuration = 300; // '--------|';
var expected = '---------------------------------------x---|';