使用combineLatest时如何从链接的rxjs observable中捕获错误?

时间:2017-01-20 03:41:47

标签: angular ionic2 reactivex ng2-translate

this post之后,我有以下

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似乎没有包括如何捕获错误(假设上述方法可行)。

有没有人对如何做到这一点有任何想法?

1 个答案:

答案 0 :(得分:1)

我觉得this.translate.get("")正在验证一个论点,而且正在抛出“{1}}。可观察的(即在它甚至创造其可观察的之前)。

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

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("")是否正在抛出错误'像这样的可观察物:

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}`);
  }
);

如果这是它正在做的事情,我猜它是合理的行为,因为它不太可能是空键有效。错误更多内部'可能会通过observable报告,并且应由您传递给subscribe的错误回调处理。