2017-02-24 9 views
0

Observableストリームが3秒以上かかると終了しようとしています。問題は、同じ値を数回コピーして貼り付けると、distinctUntilChanged演算子は入力ストリームを渡すことができないということです。だから、弦の音が聞こえなくなったらタイムアウトしたい。ここに私が持っているものがあります。RxJSタイムアウトが機能していない

 import { Subject } from "rxjs/Subject"; 
     import "rxjs/add/operator/filter"; 
     import "rxjs/add/operator/debounceTime"; 
     import "rxjs/add/operator/distinctUntilChanged"; 
     import "rxjs/add/operator/switchMap"; 
     import "rxjs/add/operator/timeout"; 

     this._searchSubject 
     .filter(val => val.length > 0) 
     .debounceTime(500) 
     .distinctUntilChanged() 
     .timeout(3000) 
     .switchMap(userSearchInput => { 
      ...api call that returns Promise 
     }) 
     .subscribe(searchResults => { 
      ...do stuff with the result 
     }); 

答えて

2

タイムアウトはTimeoutErrorです。このエラーは処理していますか?

Rx.Observable.from(new Promise(resolve => setTimeout(resolve, 1000))) 
    .timeout(500) 
    .subscribe(console.log, ({ message }) => console.error(message)); 

別の方法としては、ストリームを終了するtimeoutWith & Rx.Observable.empty()を使用することができます。

Rx.Observable.from(new Promise(resolve => setTimeout(resolve, 1000))) 
    .timeoutWith(500, Rx.Observable.empty()) 
    .subscribe(null, null,() => console.log('done')); 
関連する問題