Angular 2 - Обещание цепочки - обещание не вызывают - PullRequest
1 голос
/ 21 июня 2019

Я использую преобразователь, и я цепляю обещания, но я вызываю службу, которая также возвращает обещание, и я не могу понять, как использовать это в моей цепочке

тело второй функции никогда не вызывается

public resolve(route: ActivatedRouteSnapshot): Promise<boolean> 
{
    return this.translationsService.getTrads()
    .then(function(response:Response)
    {
        this.coreService.trads=response.json(); <<<< it gets to forkInnerZoneWithAngularBehavior function and code stops

так реализована моя сервисная функция

getTrads() {
    if (this.trads) {
        return new Promise((resolve, reject) => {
            resolve(this.trads);
        });
    } else {
        return this.http.get(.....).toPromise();
    }
}

У меня такое чувство, что я делаю это неправильно, но, честно говоря, rxjs действительно усложняет ситуацию

спасибо

решение: я упростил код, и «this» не было определено, поэтому я использовал =>

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Ваша функция getTrads возвращает обещание, которое разрешается либо в массив, либо в ответ HTTP. Если вы хотите преобразовать его в нужный массив, вам нужно будет выполнить response.json() внутри функции getTrads:

getTrads() {
    if (this.trads) {
        return Promise.resolve(this.trads);
    } else {
        return this.http.get(...).toPromise()
            .then(response => response.json());
    }
}
0 голосов
/ 21 июня 2019

функция getTrads () в качестве Обещания

Если данные существуют, отправьте данные в блок then для следующей функции, если не отправите их в блок error.

getTrads(): Promise<any> {
  return new Promise((resolve, reject) => {
    if (this.trads) {
      resolve(this.trads);
    } else {
      reject();
    }
  });
}

resol () функция Promise

ожидание данных из функции getTrads () и обработка полученных данных или ошибка

public resolve(route: ActivatedRouteSnapshot): Promise<boolean> {
  return new Promise((resolve, reject) => {
    this.translationsService
      .getTrads()
      .then(result => {
        // resolve here
        // if you want to check if result is empty, do it here as well
      })
      .catch(error => {
        // reject here
      });
  });
}

(что вы делаете с функцией resol () непонятно из вашего вопроса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...