具有条件出口的Angular http - Chain Observable

时间:2017-10-10 06:57:53

标签: angular rxjs observable angular-observable

我的情况是我的应用程序需要从后端获取一些数据,然后使用这些数据执行几个步骤的处理。 我要实现的是

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

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

这是实现这种逻辑的一种优雅方式吗?

2 个答案:

答案 0 :(得分:1)

如果您使用新的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))

答案 1 :(得分:0)

你可以这样做:

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