2017-04-14 56 views
0

我對switchMap在rxjs而觀察到的困惑:rxjs switchMap的onerror行爲

,比如我有下面的代碼:

Observable.fromEvent(button, 'click') .switchMap(() => Observable.fromPromise(fetch('http://return-error.com'))) .subscribe( (response) => { console.log(response); }, (error) => { console.log(error); } ); 如果我得到提取錯誤,訂閱中斷。那麼是否有辦法處理它,不會爲任何錯誤創建新訂閱?

我甚至試圖捕獲錯誤並返回Observable,但訂閱無論如何都中斷。

upd:如何處理angular 2 http.get而不是提取?

回答

1

如果您在提出這些問題時創建了Bin,它總是更有幫助。我爲你做了這個。

您只需要在獲取調用中吞下錯誤。例如。

fetch('bad-url').catch(err => 'Error but keep going')

這裏的演示。點擊文檔(輸出)來觸發事件。

http://jsbin.com/vavugakere/edit?js,console,output

(您需要使用原生瀏覽器獲取的實現或者它會拋出一個錯誤)

+0

謝謝你,它確實有效。你知道如何處理角2 http.get而不是獲取? –

+0

@MikhailLinkov我很高興它幫助!我是一個熱愛RxJS的React人。我不知道Angular的方法。但是如果'http.get'返回一個承諾,你可以用catch來處理它。如果它返回一個可觀察的錯誤,根據你的需要有不同的方法來處理它。 –

+0

Angular 2 http返回observable,第一種方式是調用toPromise,但你說trere是不同的方式,第二個是重新訂閱)我也很好奇知道它是錯誤的還是功能這個switchMap的行爲錯誤,因爲沒有調用onError後的onComplete回調 –