如何在角度中有条件地使用可观察内部的返回



我有一个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;
});

最新更新