Поздний ответ от API - PullRequest
       3

Поздний ответ от API

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

Я изучаю TypeScript и в настоящее время пытаюсь использовать Google API для книг. Проблема, которая у меня есть, заключается в том, что в то время, когда ожидают получить ответ, у меня ноль. Тем не менее, я записываю ответ и данные представлены консолью. Следующее странное это то, что эти данные регистрируются и конец всего моего кода (как последнее, но не тогда, когда я на самом деле делаю метод ведения журнала). Есть ли способ ждать ответа? Мой код частей:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { OrderPage } from '../order/order';
import { BooksApiProvider } from '../../providers/books-api/books-api';

@Component({
  selector: 'page-book',
  templateUrl: 'book.html'
})
export class BookPage {

    books:any;

    constructor(public navCtrl: NavController, public booksProvide: BooksApiProvider) {
    }

  moveToOrder() {
    debugger;
    this.books = this.booksProvide.getBook();
  }
}
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';


@Injectable()
export class BooksApiProvider {

  constructor() {
  }

  getBook(){
    fetch('https://www.googleapis.com/books/v1/volumes?q=isbn:9780439139601')
    .then(res => res.json())
    .then(data => console.log(data))
  }
}

1 Ответ

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

Ваш метод getBook() ничего не возвращает, поэтому this.books всегда будет нулевым.
Поскольку вы используете fetch здесь, вы можете вернуть обещание в вашем методе getBook(), позволяя вам выполнить любое действие с извлеченными данными.

getBook(): Promise<any> {
  return fetch('https://www.googleapis.com/books/v1/volumes?q=isbn:9780439139601')
    .then(res => res.json())
    .then(data => {
      console.log(data);
      return Promise.resolve(data);
    });
}

Затем вы можете вызвать .then на getBook(), чтобы сделать с данными все, что вы хотите.
(Назначьте данные для this.books для пример)

this.booksProvide.getBook()
  .then(data => this.books = data);

Вы используете Angular мысль, вы должны взглянуть на HttpClient. Это почти то же самое, что и fetch, если только он не имеет дело с Rx JS и Observables, которые широко используются в Angular.

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