我的应用程序中有一个函数,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.');
}
});
}
通过做以上两件事,我能够解决我的问题。
感谢大家对我问题的快速回复。
希望这将帮助像我这样面临相同问题的人。