Вот мой подход:
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);
}
};
Еще один способ получить данные из вашего бэкенда - вместо подписки на данные, вы также можете вернуть обещание и затем использовать асинхронное ожидание в своем компоненте
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) {
}
}
Вы возвращаете Subscription
из своего сервиса (и, следовательно, своего распознавателя) вместо того, чтобы возвращать Наблюдаемое. Не подписывайтесь на услуги. И укажите возвращаемые значения, чтобы избежать стрельбы себе в ногу:
getCategories(): Observable<Array<Category>> {
return this.http.get<Something>('https://myapi.com/something').pipe(
map(something => something.response)
);
}
Обратите внимание
Прочтите руководство HttpClient , а также RxJS .