在这种情况下,我需要等待可观察对象开始发出值,然后再执行后续代码。到目前为止,我得到的最接近的是这样的:
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
是指错误的上下文,但这是另一个问题。
如何创建可观察的对象,该对象将阻止执行直到发出值?
答案 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(...)