我有一个观察对象,需要在下一条指令之前执行
export class MyExample implements OnInit {
flag;
constructor(private myService: MyService) { }
myFunc() {
flag = 0;
this.myService.subscribe(data => {
this.consumeData(data);
this.flag = 1;
});
}
}
subscribe()
内部的指令可能需要几秒钟的时间才能准备就绪。我需要将init()
函数转换为async init()
。我添加了一个flag
来指示成功,但是我找不到将Observable与async函数(或者可能只是一个promise)结合起来的方法。
在我的组件中,我想通过以下方式调用init()
:
this.myFunc().then(() => console.log('ok'));
答案 0 :(得分:0)
如果您想将可观察的事物视为应许,那么最简单的事情就是await this.myService.toPromise()
。
答案 1 :(得分:0)
Observable就是一种数据流...如果您只有一个值来自Observable,请考虑使用
return this.myService.
.pipe(take(1))
.subscribe(...)
这样,可观察对象也将自动取消订阅。
您还可以致电toPromise()
而不是subscribe(...)
并将结果用作承诺
return this.myService.
.pipe(take(1))
.toPromise().then(...)
然后您可以将await
与它一起使用
答案 2 :(得分:0)
通过使用toPromise()
运算符,可观察对象可以轻松转换为Promise。
async myFunc() {
return this.myService.doSomething().pipe(
tap(data => this.consumeData(data))
).toPromise();
}