Вызов рекурсивной функции в Observable не работает в ionic3 - PullRequest
0 голосов
/ 03 октября 2018

У меня есть одна функция в моем приложении getServerData(), которую я вызываю с домашней страницы и передаю Token в качестве параметра в моем вызове API в этой функции.

, если Token является действительным 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().

Укажите мне это.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Наконец, после долгих исследований, я нашел решение своей проблемы.

1-й Я хотел обновить библиотеку rxjx, поскольку моя установленная версия rxjx была 5.5.2 , поэтому я обновил его до последней 5.5.11 .

2-й Я был вызван Observable без subscribe() к этому Observable поэтому он никогда не вернется, поэтому я обновил мой рекурсивный вызов из блока ошибок, откуда я вызываю его 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.');
         }
    });
}

Выполнив 2 действия, я смог решить свою проблему.

Спасибо всем за быстрый ответ на мою проблему.

Надеюсь, это поможет тому, кто сталкивается с такой же проблемой, как я.

0 голосов
/ 04 октября 2018

Не рекомендуется использовать обещание в наблюдаемом.Используйте Obserable.fromPromise, а также используйте mergeMap.Что будет, если вы будете использовать.Всякий раз, когда придет какая-либо ошибка, Observable выдаст ошибку, и вы сможете ее отловить.Я предложу использовать тему, а не создавать свои собственные наблюдаемые, а также помнить одну вещь, которая не подписывается в вашем сервисе.Надеюсь, это поможет

...