Делать наблюдаемый «бег» синхронно - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть ситуация, в которой мне нужно подождать, пока наблюдаемое не начнет испускать значения, прежде чем будет выполнен следующий код.Самое близкое, что я получил до сих пор, это:

async ensureContentLoaded() {
  if (!this.content) {
    defer(async () => {
      this.content = await this.getContent();
      console.log(`Got content`);
    }).subscribe();

    console.log(`Finished`);
  }

В данный момент консольный журнал Finished появляется перед Got content.Я хочу, чтобы наблюдаемое блокировалось до тех пор, пока оно не начнет излучать значения.Обратите внимание, что this.getContent() возвращает обещание;хотя он может легко вернуть наблюдаемое, если это что-то меняет.Также я знаю, что this.content относится к неправильному контексту, но это еще одна проблема.

Как я могу создать наблюдаемое, которое будет блокировать выполнение до тех пор, пока значение не будет передано?

1 Ответ

0 голосов
/ 22 февраля 2019

Следующий код должен быть достаточным.

ensureContentLoaded() {
  if (this.content) return of(this.content);
  return from(this.getContent());
}
// usage 
this.ensureContentLoaded().subscribe(console.log);
// or turn it to promise if needed
this.ensureContentLoaded().pipe(toPromise()).then(...)
...