在 Observable 中调用递归函数在 ionic3 中不起作用



我的应用程序中有一个函数,getServerData()我从主页调用该函数,并将令牌作为参数传递到此函数的API调用中。

如果令牌有效 API 将返回数据,否则它将返回未经授权的访问,并显示令牌过期错误,当时我正在使用另一个 API 中新生成的令牌调用相同的函数,但有些递归函数调用在Observable中不起作用。

查看以下代码以获取更多详细信息:

/**
* Get Search result from server.
*/
getServerData(searchText: string): Observable<any> {
let self = this;
return Observable.create(function(observer) {
self.getToken().then((token) => {
console.log('Token : ', token);
self.httpPlugin.get(self.url + searchText, {}, {}).then((response) => {
console.log("Response Success : " + JSON.stringify(response));
observer.next(jsonResponse);
}).catch(error => {
if (error.status == 403) {
//Call Same method Again
self.getServerData(searchText);
} else {
console.log("Error : " + error);
console.log("Error " + JSON.stringify(error));
observer.error(error);
}
});
}).catch((error) => {
observer.error(error);
console.log("Error : " + error);
})
});
}

调用相同的函数时,没有完成代码执行。

根据评论进行编辑:

我订阅如下:

this.subscription =  this.api.getServerData(this.searchString.toUpperCase()).subscribe((response: any) => {
console.log("back with data :-",response);
}, error => {
console.log("InLine Error : ",error);
});

无法理解出了什么问题,或者我在从Observable()调用函数时是否犯了什么错误。

指导我。

提前感谢!

在可观察中使用 promise 不是好习惯。使用 Obserable.fromPromise,也可以使用 mergeMap。如果你会使用会发生什么。每当出现任何错误时,Observable 都会抛出错误,您将能够捕获。我建议使用主题而不是创建自己的可观察量,并记住一件事没有订阅您的服务。 希望会有所帮助

最后,经过大量研究,我找到了解决问题的方法。

第一件事是我需要更新我的rxjx库,因为我安装的rxjx版本是5.5.2,所以我将其升级到最新的5.5.11

第二件事是我在没有subscribe()的情况下调用 ObservableObservable所以它永远不会返回,所以我从错误块更新了我的递归调用,从我调用它subscriber()的地方,如下所示。

getSearchData(){
this.subscription = this.api.getServerData(this.searchString.toUpperCase()).subscribe((response: any) => {
console.log("back with data :-",response);
}, error => {
if (response.status == 403) {
this.getSearchData();
}else{
console.log("InLine Error : ",response);
this.showAlert('Error', 'Something went wrong. please try again.');
}
});
}

通过做以上两件事,我能够解决我的问题。

感谢大家对我问题的快速回复。

希望这将帮助像我这样面临相同问题的人。

最新更新