Как добиться асинхронности?

142
10 января 2020, 15:20

Есть функция:

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)

Как сделать эту конструкцию асинхронной?

Answer 1

Эта конструкция и так асинхронная.

Если не прибегать к использованию операторов 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 нравится больше.

READ ALSO
Изменение значения css свойства

Изменение значения css свойства

Нужно что бы при клике значение translateX изменялось при каждом кликеСейчас событие срабатывает один раз

148
Откуда берутся значения функции

Откуда берутся значения функции

Не пойму, как так получается, что значением аргумента year становятся значения переменных carYear и personYear? Распишите пошагово, пожалуйста

128
Скрыть дочернии элементы при клике

Скрыть дочернии элементы при клике

Нужно при клике скрыть все дочернии элементы класса tp-revslider-slidesli и показать все дочернии элементы класса tp-revslider-slidesli-2, делал так не получилось:

137
Изменение размеров окна в приложении в зависимости от устройства

Изменение размеров окна в приложении в зависимости от устройства

В Play Market(и не только, но возьмём его) есть приложения(на ПК это сайты)Устройства которые их скачивают имеют разные размеры экрана

187