我在应用程序getScript
中有一个函数,该函数是从主页调用的,并将Token作为参数传递给在此函数中调用的API。
如果令牌有效,API将返回数据,否则它将返回未经授权的访问,并带有令牌过期错误。那时,我正在使用另一个API中的新生成的令牌调用同一个函数,但是递归函数调用在getServerData()
中不起作用
检查以下代码以获取更多详细信息:
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);
});
调用函数时犯了一些错误。
为此指导我。
谢谢!
答案 0 :(得分:0)
在可观察的范围内使用promise不是一个好习惯。使用Obserable.fromPromise,也可以使用mergeMap。如果您使用会发生什么。每当出现任何错误时,Observable都将引发错误,您将能够抓住。我将建议使用Subject而不是创建自己的可观察对象,并且还要记住一件事,即没有订阅您的服务。 希望对您有帮助
答案 1 :(得分:0)
最后,经过大量研究,我找到了解决问题的方法。
第一件事是我需要更新rxjx
库,因为我安装的rxjx
版本是 5.5.2 ,所以我将其升级到了最新的 5.5.11 。
第二件事是我在没有subscribe()
的情况下调用Observable
的Observable,所以它永远不会返回,所以我从错误块(我将其命名为{ {1}},如下所示。
subscriber()
通过做以上两件事,我就能解决我的问题。
感谢您对我的问题的快速答复。
希望这会帮助像我一样面临同样问题的人。