2017-07-24 69 views
2

我用angular4和RxJS觸發觀察到幾個毫秒

基本假設是:當用戶在文本框輸入一個字母我引發一些的getData()函數(keyup事件),得到數據和顯示在文本區域下面

我不想觸發函數,並在用戶輸入字母后立即獲取數據,但讓他輸入完整的短語,等待例如300毫秒,最後觸發函數,得到數據和顯示

所以我想實現的流程是simila R鍵是:

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

一個解決方案就是把它們包裝成的setTimeout(),但它會更好流利做在一個可觀測的風格

我曾經見過該解決方案問題,但無法再找到它..

謝謝!

回答

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---|'; 
+0

這是它,謝謝! –