Как работать с задержкой получения Http API Response в Angular - PullRequest
0 голосов
/ 30 апреля 2020

Здесь я получаю отложенный ответ от этого this.ServiceHandler.getTxnInfo([], params) API. Поэтому я использую setTimeout и async/await. Но мое обещание отклонено.

bookingInfo = [];

  timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

Это то, где я нахожусь вызывая мой запрос на получение API.

async getBookingInfo(dateType: string) {
    const params = [];
    params.push({code: 'dateType', name: dateType});
    params.push({code: 'fromDate', name: '2019-01-01'});
    params.push({code: 'toDate', name: '2019-05-31'});
    return await this.ServiceHandler.getTxnInfo([], params).toPromise();
  }

getBookingDetails() {
    this.timeout(150057 ).then(() => this.getBookingInfo('BOOKING').then(
      bookings => {
        console.log(bookings);
      }));
  }

Но я не смог распечатать мое console.log(bookings); Обещание отклонено и мои запросы на получение не выполнены. Это ошибка, которую я получаю enter image description here

Как я могу решить.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Прежде всего, давайте изменим этот код, чтобы он больше подходил для Angular и избегал обещаний. Нет необходимости конвертировать наблюдаемые в обещания через toPromise()

getBookingInfo(dateType: string): Oservable<SOME_TYPE_HERE> {
  const params = [];
  params.push({code: 'dateType', name: dateType});
  params.push({code: 'fromDate', name: '2019-01-01'});
  params.push({code: 'toDate', name: '2019-05-31'});
  return this.ServiceHandler.getTxnInfo([], params);
}

getBookingDetails(): void {
  this.getBookingInfo('BOOKING').subscribe(bookings => {
    console.log(bookings);
  });
}

Этот код не содержит обещаний и позволяет проверить, работает ли он. Если нет - тогда мы, по крайней мере, знаем, что обещания не являются причиной.

0 голосов
/ 30 апреля 2020

Создание метода asyn c и ожидание должно делать то, что вы ожидаете.

async getBookingInfo(dateType: string) {
 const params = [];
 params.push({code: 'dateType', name: dateType});
 params.push({code: 'fromDate', name: '2019-01-01'});
 params.push({code: 'toDate', name: '2019-05-31'});
 return await this.ServiceHandler.getTxnInfo([], params).toPromise();
}

async getBookingDetails() {
 await this.getBookingInfo('BOOKING').then(
  bookings => {
    console.log(bookings);
 });
}
...