Angular RX JS, fini sh, наблюдаемый до возвращения - PullRequest
0 голосов
/ 12 марта 2020

я хочу знать, как «ждать», не используя async / await, чтобы завершить sh наблюдаемый, а затем вернуть это значение

// import {Observable, of} from 'rxjs';
getFirstQueue() {
  if (this.insideVar) {
    return of(this.insideVar);
  }
  this.http.get(this.createUrl(`some_resource`)).subscribe((someVar: any) => {
    this.insideVar = someVar;
  });
  return this.insideVar;
}

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Невозможно go из асинхронного обратного вызова в синхронный контекст. Для этого вам нужно использовать async/await, но если вы посмотрите на декомпилированный код, async/await - это просто синтаксический c сахар поверх Promises, поэтому он выглядит только так, как будто он пришел из asyn c в син c

0 голосов
/ 12 марта 2020

Невозможно вернуться из подписки. Вы должны вернуть Observable. Затем функция выше стека подпишется на эту наблюдаемую.

Вы можете использовать tap для выполнения того же побочного эффекта, который вы в настоящее время делаете в теле подписки перед возвратом.

getFirstQueue(): Observable<any> {
  if (this.activeQueue) {
    return of(this.activeQueue);
  }
  return this.http.get(this.createUrl(`some_resource`)).pipe(
    tap((someVar: any) => {
      this.insideVar = someVar;
    })
  );
}
...