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

时间:2018-10-03 12:54:27

标签: ionic-framework rxjs ionic3 observable

我在应用程序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); }); 调用函数时犯了一些错误。

为此指导我。

谢谢!

2 个答案:

答案 0 :(得分:0)

在可观察的范围内使用promise不是一个好习惯。使用Obserable.fromPromise,也可以使用mergeMap。如果您使用会发生什么。每当出现任何错误时,Observable都将引发错误,您将能够抓住。我将建议使用Subject而不是创建自己的可观察对象,并且还要记住一件事,即没有订阅您的服务。 希望对您有帮助

答案 1 :(得分:0)

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

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

第二件事是我在没有subscribe()的情况下调用Observable的Observable,所以它永远不会返回,所以我从错误块(我将其命名为{ {1}},如下所示。

subscriber()

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

感谢您对我的问题的快速答复。

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