在catch()中返回empty()时不调用finally()

时间:2017-02-02 09:58:03

标签: rxjs5

我编写了一个通用请求方法,该方法应该在请求运行时显示加载指示符。如果发生错误(如404),我会在.catch然后return Observable.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);

1 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;