我有一个angular 13 HTTP调用,正在订阅一个observable。如何根据作为有效负载传递给HTTP调用的对象的长度有条件地调用返回语句。
我想要实现的示例代码:
public myApiCall(userId: string,customId: string, payload: {}): Observable<any> {
if(payload.length > 0 ){
return this.httpClient.post<any>(environment.apiUrlBasePath + environment.USER_DETAILS, payload);
} else {
return this.httpClient.post<any>(environment.apiUrlBasePath + environment.NO_USER_DETAILS,payload);
}
}
如何在有角度的http调用中使用条件语句。
payload
被定义为对象{}
,而不是数组。length
不是对象的属性。
您可以检查对象是否为undefined
,也可以通过将其属性设置为如下数组来测试对象是否为空:Object.keys(payload).length === 0
对于更多的反应式方法您可以使用RxJs条件运算符iff来实现这一点。
iff运算符接受3个参数,第一个参数是您的条件,第二个和第三个参数是返回Observable的不同服务。
如果条件为true订阅第一个可观察的(HTTP调用(,如果条件为false则订阅第二个可观察
iif(
() => {
//Add your condition here
return payload.length > 0;
},
this.httpClient.post<any>(environment.apiUrlBasePath + environment.USER_DETAILS, payload),
this.httpClient.post<any>(environment.apiUrlBasePath + environment.NO_USER_DETAILS,payload)
)
.pipe(takeUntil(this.unsubscribe$))
.subscribe((items)=> {
this.someData = items;
});