等待变量更改

时间:2019-04-03 09:51:03

标签: javascript angular typescript

我有一个观察对象,需要在下一条指令之前执行

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'));

3 个答案:

答案 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();
}