我想创建此功能:
这是我的代码:
let a = this.http.get("URL");
a.subscribe(response => {
if(response.data.length == 0)
Observable.throw({});
});
a.subscribe(x => {console.log("CALL NEXT API")}, error => { console.log("ANOTHER API")}
此代码总是显示“CALL NEXT API”,从不在订阅中调用错误函数。 连续调用多个请求和条件的最佳解决方案是什么?
答案 0 :(得分:1)
如果这是您的代码
let a = this.http.get("URL");
a.subscribe(response => {
if(response.data.length == 0)
Observable.throw({});
});
a.subscribe(x => {console.log("CALL NEXT API")}, error => { console.log("ANOTHER API")}
不要错过为什么它不起作用。
让我分解你。
首先,进行HTTP调用:
let a = this.http.get("URL");
这里没什么不好的。然后,您订阅一次:
a.subscribe(response => {
if(response.data.length == 0)
Observable.throw({});
});
在这里,说实话,你这样做:
(无)
没错,你做没什么。您所做的就是创建一个可观察的错误,您不会绑定到变量。基本上,你什么都不做。
然后,您进行第二次订阅:
a.subscribe(x => {console.log("CALL NEXT API")}, error => { console.log("ANOTHER API")}
用文字说明,这就是
如果调用成功,请记录“CALL NEXT API”,如果有错误,请记录“ANOTHER API”。
如果您总是看到 CALL NEXT API ,那么我假设您只能成功拨打电话。
如果您的目标是进行连续的API调用,则应使用mergeMap
运算符,如下所示:
this.http.get('URL')
.pipe(mergeMap(response1 => {
this.http.get(response1.data.length ? 'SUCCESS URL' : 'EMPTY ARRAY URL').subscribe(response2 => {
/* ... */
});
}));
答案 1 :(得分:0)
我可能误解了这个问题,但你不能在订阅回调中调用其他API吗?
this.http('URL').subscribe(response => {
if (response.data.length == 0) {
console.log('Call another API');
}
else {
console.log('Call next API');
}
}, error => {
console.log('Could not return result');
}
如果成功调用api,即使长度为0,它也会返回结果。然后你可以调用相关的API。
如果访问URL或数据格式不正确等问题,它应该只会遇到错误回调。