【问题标题】:Angular6 - Wait for subscribe to finishAngular6 - 等待订阅完成
【发布时间】:2019-08-02 19:20:45
【问题描述】:

我有一个组件,服务中的方法是:

getResults(option:any) {
    //forming the url and patchModel
    return this.http.patch(url,patchModel,option);
}

组件文件如下:

onClickMenu(option: any): void {  //function doesnt return anything
    this.service.getResults(option).subscribe(result => {
        this.menu = result.menu;
    });
}

现在我得到了正确的值,但是我在 typescript 文件中的 onClickMenu 之后还有其他方法,这些方法在 this.menu 填充之前执行。由于其他方法需要 this.menu 中的值,因此无法执行。我想等到 this.menu 获得正确的值。

没有 async/Promise,我该如何做到这一点?我热衷于使用 observable。

【问题讨论】:

  • 在订阅回调中添加另一行,并在您拥有 menu 实例后调用您想要执行的代码。
  • 这是不可能的,因为结果会进入 HTML 文件,该文件调用另一个需要正确值“this.menu”的方法。我需要一种方法来等待 this.menu 获取正确的值。

标签: typescript angular6 angular-httpclient


【解决方案1】:

在填充 this.menu 之前调用的“函数”应该从 finally 块内部调用...检查我在下面调用中的评论

this.service.getResults(option).subscribe(
    result => { this.menu = result.menu; }
    () => { /* call your function(s) here... inside the finally block */}
);

这个 finally 块将在 this.menu = result.menu 完成并且您获得更新的菜单后执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 2021-11-16
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多