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