同步进行可观察的“运行”

时间:2019-02-21 16:22:45

标签: angular typescript rxjs reactive-extensions-js

在这种情况下,我需要等待可观察对象开始发出值,然后再执行后续代码。到目前为止,我得到的最接近的是这样的:

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()返回一个promise;尽管如果有任何不同,它很容易返回一个可观察的对象。我也知道this.content是指错误的上下文,但这是另一个问题。

如何创建可观察的对象,该对象将阻止执行直到发出值?

1 个答案:

答案 0 :(得分:0)

下面的代码就足够了。

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(...)