Есть функция:
getSome() {
this.http.get('/some')
.subscribe( (data: Array<object>)=> {
console.log(data)
this.AllMaterial = data; // не делает запрос
}, err => {
console.log(err)
})
}
Я должен вызвать ее после проверки в другой функции:
second() {
if (this.isEmpty(this.AllMaterial)) {
this.getSome();
}
console.log(this.AllMaterial)
}
При вызове естественно в косоли: undefined => console.log(this.AllMaterial) somedate => console.log(data)
Как сделать эту конструкцию асинхронной?
Эта конструкция и так асинхронная.
Если не прибегать к использованию операторов RxJS - потоки можно конвертировать в Promise
и работать уже с async/await
:
getSome() {
return this.http.get('/some').toPromise();
}
async second() {
if (this.isEmpty(this.allMaterial)) {
this.allMaterial = await this.getSome();
}
console.log(this.allMaterial);
}
Без async/await
:
import { iif, of } from 'rxjs';
import { tap } from 'rxjs/operators';
getSome() {
return this.http.get('/some').pipe(
tap((allMaterial) => {
this.allMaterial = allMaterial;
})
);
}
second() {
iif(
() => this.isEmpty(this.allMaterial),
this.getSome(),
of(null)
).subscribe(() => {
console.log(this.allMaterial);
});
}
P.S. - мне вариант с async/await
нравится больше.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно что бы при клике значение translateX изменялось при каждом кликеСейчас событие срабатывает один раз
Не пойму, как так получается, что значением аргумента year становятся значения переменных carYear и personYear? Распишите пошагово, пожалуйста
Нужно при клике скрыть все дочернии элементы класса tp-revslider-slidesli и показать все дочернии элементы класса tp-revslider-slidesli-2, делал так не получилось:
В Play Market(и не только, но возьмём его) есть приложения(на ПК это сайты)Устройства которые их скачивают имеют разные размеры экрана