1

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

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

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

哪个是实现这种逻辑的优雅方式?

4

2 回答 2

1

如果您使用 new 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))
于 2017-10-10T09:08:39.453 回答
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;
}
于 2017-10-10T07:23:07.650 回答