【问题标题】:Angular http - Chain Observables with conditional exitsAngular http - 带有条件退出的链式 Observables
【发布时间】:2018-03-21 11:41:34
【问题描述】:

我的应用需要从后端获取一些数据,然后对这些数据进行几个处理步骤。 我要实现的是类似

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

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

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

【问题讨论】:

  • 如果服务返回错误,您应该捕获。否则,请考虑使用过滤器
  • 没有必要出错。后端可以返回一组空数据。您能否提供有关如何应用过滤器的更多详细信息?

标签: angular rxjs observable angular-observable


【解决方案1】:

你可以这样做:

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

【讨论】:

    【解决方案2】:

    如果您使用新的HttpClient,您的回复会自动转换为 json。而且,如果您的后端返回一个空响应,那么在窗帘后面发生的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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多