Angular http - 有条件退出的链式 Observable

Angular http - Chain Observables with conditional exits

我遇到这样一种情况,我的应用需要从后端获取一些数据,然后对这些数据进行几个步骤的处理。 我要实现的是

this.http.get('myurl')
          .map(data => doFirstProcessingStep(data))
          .map(data1 => doSecondProcessingStep(data))
          .map(data2 => doThirdProcessingStep(data))

如果后端没有发送有效数据,我想退出处理链而不执行任何步骤,只返回一个Observable.of(null)

实现这种逻辑的优雅方式是什么?

您可以像下面这样操作:

this.http.get('myurl')
    .map(data => this.doAllProcessing(data));

doAllProcessing(data) {
    if (!dataIsValid(data)) {
        return null;
    }
    data = doFirstProcessingStep(data);
    data = doSecondProcessingStep(data);
    data = doThirdProcessingStep(data);

    return data;
}

如果您使用新的 HttpClient,您的回复会自动转换为 json。而且,如果您的后端 returns 一个空响应,幕后发生的 JSON.parse 将引发错误。

在 Observable 链中,如果抛出错误,它将跳过链中的所有其他运算符,直到找到 catch。所以它绝对应该按预期的方式工作:

this
  .http
  .get('myurl')
  .map(data => doFirstProcessingStep(data))
  .map(data1 => doSecondProcessingStep(data))
  .map(data2 => doThirdProcessingStep(data))
  .catch(err => Observable.of(null))