我的情况是我的应用程序需要从后端获取一些数据,然后使用这些数据执行几个步骤的处理。 我要实现的是
this.http.get('myurl')
.map(data => doFirstProcessingStep(data))
.map(data1 => doSecondProcessingStep(data))
.map(data2 => doThirdProcessingStep(data))
如果后端没有发送有效数据,我想退出处理链而不执行任何步骤,只返回Observable.of(null)
这是实现这种逻辑的一种优雅方式吗?
答案 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;
}