2

这篇文章之后,我有以下内容

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上面的处理程序。不幸的是,我发现的示例和文档似乎不包括如何捕获错误(假设上述方法可行)。

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

4

1 回答 1

1

在我看来,这很可能this.translate.get("")正在验证一个论点并且正在将可观察的东西扔到“外面”(即在它甚至创建它的可观察对象之前)。

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

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 的“外部”,如下所示:

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

于 2017-01-20T04:17:20.213 回答