2017-02-02 27 views
0

我寫了一個通用的請求方法,該方法應該在請求運行時顯示加載指示符。如果發生錯誤(如404),我在.catch然後return Observable.empty()中顯示消息,以便下面的代碼不會崩潰(因爲沒有數據返回)。finally()在catch()中返回empty()時不會調用

最大的問題是,然後.finally也不會被調用。這是一個錯誤?有沒有解決方法?這是我的代碼:

res = Observable 
    .of(true) 
    .do(() => this.store.dispatch(new ShowLoadingIndicatorAction())) 
    .switchMap(() => this.http.get(url, { headers: this.headers })) 
    .publishReplay(1) 
    .refCount() 
    .catch(error => { 
    this.messages.handleRequestError(error); 
    return Observable.empty(); 
    }) 
    .finally(() => this.store.dispatch(new HideLoadingIndicatorAction())); 

// then later: 
res.subscribe(doStuffWithData); 

回答

2

你使用的是什麼RxJS版本?它確實優秀作品在這個例子:

const res$ = Rx.Observable 
 
    .of(true) 
 
    .switchMap(() => Rx.Observable.throw("Rest Error")) 
 
    .publishReplay(1) 
 
    .refCount() 
 
    .catch(error => Rx.Observable.empty()) 
 
    .finally(() => console.log("Calling Finally!")); 
 

 
res$.subscribe(console.info);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

+1

嘖嘖,你似乎是正確的!我正在使用5.0.3。似乎在Ionic中顯示消息會阻止加載指示器...我應該使用console.log來測試它。謝謝,並對不起:) – MiB

+0

好吧 - 也許你可以用「離子」標記questin,然後提供一個自己的答案,以防其他人在這個問題上絆倒:) – olsn

+1

嗯,這個問題似乎沒有那麼有用:結果我們的應用程序顯示了幾個加載指示符,其中一個未被關閉,因爲.finally()調用實際上在該流中缺失。所以一切按預期工作,問題出現在鍵盤前面.... – MiB

相關問題