我想创建此功能:
这是我的代码:
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”,从不在订阅中调用错误函数。连续调用多个请求和条件的最佳解决方案是什么?
如果这是你的代码
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 => {
/* ... */
});
}));
我可能误解了这个问题,但你不能在订阅回调中调用其他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或数据格式不正确等问题,它应该只触及错误回调。