javascript - Angular 6 - 如何等待通话订阅

标签 javascript angular typescript

在下面的代码中,我有 2 个调用,getDetail 和 Save。 保存使用在第一次调用 getDetail 的订阅中创建的对象“this.detail$”。

问题是 this.detail$ 在调用 Save 之前从未被赋值。 在将 this.detail$ 分配给 bit 之后,我尝试将 Save 逻辑放入订阅中的函数中,我得到了相同的结果。 处理此问题的最佳方法是什么?

SetPublishedFlag(flag: boolean, _id:string){
    this.id = _id;
    this.getDetail();
    this.Save(flag);
  }

  getDetail(): void {
    this.data.getEventDetail(this.id).subscribe(data => this.detail$ = data as DetailModel);
  }

  Save(flag: boolean) {
    this.detail$.Published = flag;
    this.edit.editEvents(this.detail$, this.id);
  }
}

最佳答案

尝试这样的事情:

async SetPublishedFlag(flag: boolean, _id:string){
    this.id = _id;
    this.detail$ = await this.getDetail();
    this.Save(flag);
  }

  getDetail(): Promise<DetailModel> {
    return this.data.getEventDetail(this.id).toPromise();
  }

  Save(flag: boolean) {
    this.detail$.Published = flag;
    this.edit.editEvents(this.detail$, this.id);
  }
}

关于javascript - Angular 6 - 如何等待通话订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52588511/

相关文章:

javascript - RxJS switchMap 与 take 运算符

typescript - 为什么类型检查器允许此代码?

javascript - Angular 6 : ERROR TypeError: Cannot read property 'toLowerCase' of undefined

typescript - commonjs 的单个 .js 和 .d 文件

javascript - AngularJS - ngRepeat。 ng-repeat 重新渲染后需要保持关注同一元素事件

javascript - 如何使 Javascript 警报永远只显示一次?

javascript - angularJS 在 Firefox 中的糟糕表现

Angular CLI 和 Angular 版本的区别

javascript - react 汇总 : 'name' is not exported by node_modules/

javascript - 本地文件在 angularjs 4 中显示 404 错误