首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在可观测的ionic3中调用递归函数

在可观测的ionic3中调用递归函数
EN

Stack Overflow用户
提问于 2018-10-03 12:54:26
回答 2查看 227关注 0票数 0

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

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

有关更多细节,请查看下面的代码:

代码语言:javascript
复制
/**
  * 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);
  })
});

}

调用相同的函数时,不执行任何代码。

根据评论编辑:

我的订阅方式如下:

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

无法理解哪里出了问题,或者我在从Observable()调用函数时做错了什么。

在这方面指导我。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 09:18:45

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

1的事情是,我需要更新我的rxjx库,因为我安装的rxjx版本是5.5.2,所以我将它升级到最新的5.5.11

2的事情是,我将在没有subscribe()的情况下调用可观察到的Observable,所以它永远不会返回,所以我从错误块更新递归调用,在下面调用它的subscriber()

代码语言:javascript
复制
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.');
         }
    });
}

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

谢谢你对我问题的快速答复。

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

票数 0
EN

Stack Overflow用户

发布于 2018-10-04 14:41:58

在可观察的范围内使用诺言是不好的做法。使用Obserable.fromPromise,也使用mergeMap。如果你使用。每当任何错误出现时,都是可以观察到的,它会抛出错误,你就能捕捉到。我将建议使用主题,而不是创建您自己的可观察的,并记住一件事,不订阅您的服务。希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52627507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档