在文本字段

时间:2017-07-24 17:41:30

标签: angular typescript rxjs observable

我使用angular4和RxJS

基本假设是:当用户在文本字段中输入单个字母时,我触发一些getData()函数(keyup事件),获取数据并显示在文本字段下面

我想在用户输入一个字母之后立即触发该功能并立即获取数据,但是让他输入完整的短语,等待例如300毫秒,最后触发该功能,获取数据并显示

所以我希望实现的流程类似于:

myService.getDataAsObservable
.whatToDoHere?
.subscribe(data => ...handle and display the data...);

一个解决方案是将它全部包装到setTimeout()中,但在observables的样式中流畅地执行它会好得多

我曾经看过这个问题的解决方案,但再也找不到了..

谢谢!

1 个答案:

答案 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---|';