Как вернуть тело ответа HttpClient из запроса?

Вот мой подход:

var preloadImages = function (srcs, imgs, callback) {
    var img;
    var remaining = srcs.length;
    for (var i = 0; i < srcs.length; i++) {
        img = new Image;
        img.onload = function () {
            --remaining;
            if (remaining <= 0) {
                callback();
            }
        };
        img.src = srcs[i];
        imgs.push(img);
    }
};
0
задан Zana Daniel 31 March 2019 в 14:58
поделиться

2 ответа

Еще один способ получить данные из вашего бэкенда - вместо подписки на данные, вы также можете вернуть обещание и затем использовать асинхронное ожидание в своем компоненте

pull_categories(): any {
    return this.http.post('https://myapi.com/something', null).toPromise();
} 
[ 1110]

Это вернет обещание вашему компоненту, где вы также можете использовать его следующим образом:

async getCategories() {
  try {
    const categories = await this.service.pull_categories();
  } catch (e) {

  }
}
[114 ]

0
ответ дан hafridi 31 March 2019 в 14:58
поделиться

Вы возвращаете Subscription из своего сервиса (и, следовательно, своего распознавателя) вместо того, чтобы возвращать Наблюдаемое. Не подписывайтесь на услуги. И укажите возвращаемые значения, чтобы избежать стрельбы себе в ногу:

getCategories(): Observable<Array<Category>> {
  return this.http.get<Something>('https://myapi.com/something').pipe(
    map(something => something.response)
  );
}

Обратите внимание

  • на соблюдение соглашений об именах
  • использование GET для .. вместо данных POST
  • метод определяет, что он на самом деле возвращает
  • использование универсальной перегрузки метода HttpClient.get (), который позволяет указать ожидаемый тип Тело ответа
  • , что наличие полей экземпляра в сервисе неверно (и не нужно).

Прочтите руководство HttpClient , а также RxJS .

0
ответ дан JB Nizet 31 March 2019 в 14:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: