gpt4 book ai didi

Angular - 多个条件 http 请求

转载 作者:行者123 更新时间:2023-12-04 10:24:42 25 4
gpt4 key购买 nike

根据每个请求的结果,我正在努力想出一个很好的解决方案来执行多个 http 请求。到目前为止,我一直在用 switchMap,只要它只有 2 个 http 请求。但是,我发现我需要执行 3,并且我不确定如何使用 switchMap 执行此操作,或者是否有更好的解决方案。

基本上,我将等待响应,如果返回为空,我想执行第二个请求,如果返回为空,我想执行第三个请求。

让我试着举一个我到目前为止所得到的简化例子:

getData(): Observable<number> {
const $subject = new Subject<number>();

// loadData() takes in an id to specify what data to load
service.loadData(1).pipe(
switchMap(response => {
if(response.length === 0) {
return service.loadData(2);
}
else {
return of(response);
}
}),
).subscribe(result => {
$subject.next(result);
$subject.complete();
});
return $subject.asObservable();


现在这很好用,我的问题是,调用“loadData(2)”,也可能返回长度为 0 的响应,在这种情况下,我需要调用 loadData(3)。

我尝试在 switchMap 中使用另一个 switchMap,但这似乎无法正常工作。所以我的问题是,我如何能够检查 loadData(2) 响应的长度,如果它是 0,则返回 service.loadData(3) ?

非常欢迎任何帮助或提示:)

最佳答案

一种直接而丑陋的方法是单独订阅每个调用并检查它的结果。

getData(): Observable<number> {
const $subject = new Subject<number>();

service.loadData(1).subscribe(
loadOneResponse => {
if(loadOneResponse.length === 0) {
service.loadData(2).subscribe(
loadTwoResponse => {
if(loadOneResponse.length === 0) {
service.loadData(3).subscribe(
loadThreeResponse => {
$subject.next(loadThreeResponse);
$subject.complete();
},
loadThreeError => {
}
);
} else {
$subject.next(loadTwoResponse);
$subject.complete();
}
},
loadTwoError => {
}
);
} else {
$subject.next(loadOneResponse);
$subject.complete();
}
},
loadOneError => {
}
);

return $subject.asObservable();
}

关于Angular - 多个条件 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60670535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com