类型订阅中不存在catch

时间:2017-08-30 11:45:26

标签: angular

angular4中的类型订阅中不存在

catch。

this.route.parent.params.subscribe(
      params => {
        const etc = this.service.getEtc()
        Observable.blah.subscribe(results => {
          this.abc = false
        })
          .catch( err => {
            this.service.showErrorAlert('can not find');
          })
    });

2 个答案:

答案 0 :(得分:11)

正如评论中所提到的,subscribe方法返回订阅,通常应该是您链中的最后一个调用。尝试:

Observable.blah
  .catch(err => this.service.showErrorAlert('can not find'))
  .subscribe(results => this.abc = false);

针对RXJS 6进行了更新:

随着管道操作员的引入,上面的代码可以用以下内容替换:

import { catchError } from 'rxjs/operators';

Observable.blah
  .pipe(catchError(err => this.service.showErrorAlert('can not find')))
  .subscribe(results => this.abc = false);

但是,catchError应该用于管道中某处的错误恢复,例如:出现错误,但您可以返回默认对象。

要在可观察链的末尾捕获错误,我建议使用不同的.subscribe重载并传入错误处理程序。

Observable.blah
  .subscribe(
    results => this.abc = false,
    err => this.service.showErrorAlert('can not find')
  );

答案 1 :(得分:5)

您正试图调用您订阅的catch。这是不可能的。您有两个选择:

1:

Observable.blah
    .catch(err => {...})
    .subscribe(results => {
        this.abc = false
    })

2:

Observable.blah
    .subscribe(results => {
        this.abc = false
    },
    err => {
        ...
    })