使用 combineLatest 时如何捕获链式 rxjs 可观察对象的错误?

How to trap errors from chained rxjs observables when using combineLatest?

开始,我有以下

Observable.combineLatest(
        this.translate.get("key1"),
        this.translate.get(""),
        this.translate.get("key3"),
        this.translate.get("key4")
    )
    .subscribe(([result1, result2, result3, result4]) => {
        console.log(result1);
        console.log(result2);
        console.log(result3);
        console.log(result4);
    },
      error => {
        console.log(`${error}`);            
   });  

在第 2 行我得到一个错误,但这似乎没有进入上面的 error 处理程序。不幸的是,我发现的例子和 doco 似乎没有包括如何捕获错误(假设上面的方法可行)。

有没有人知道如何做到这一点?

在我看来,this.translate.get("") 可能正在验证一个参数并抛出 'outside' 可观察对象(即在它创建可观察对象之前)。

您可以使用如下代码验证错误处理:

import "rxjs/add/observable/throw";

Observable.combineLatest(
  this.translate.get("key1"),
  Observable.throw(new Error("Boom!")),
  this.translate.get("key3"),
  this.translate.get("key4")
)
.subscribe(
  ([result1, result2, result3, result4]) => {
    console.log(result1);
    console.log(result2);
    console.log(result3);
    console.log(result4);
  },
  error => {
    console.log(`${error}`);
  }
);

并且您可以验证 this.translate.get("") 正在抛出 observable 的错误 'outside',如下所示:

import "rxjs/add/observable/defer";

Observable.combineLatest(
  this.translate.get("key1"),
  Observable.defer(() => this.translate.get("")),
  this.translate.get("key3"),
  this.translate.get("key4")
)
.subscribe(
  ([result1, result2, result3, result4]) => {
    console.log(result1);
    console.log(result2);
    console.log(result3);
    console.log(result4);
  },
  error => {
    console.log(`${error}`);
  }
);

如果这是它正在做的,我想这是合理的行为,因为空键不太可能有效。超过 'internal' 的错误可能会通过 observable 报告,应该由您传递给 subscribe.

的错误回调处理