angular - Observable.subscribe() 与带有 async/await 的 Promise

标签 angular promise rxjs observable

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

2年前关闭。




Improve this question




Service 中考虑以下两种方法用于查询网络服务:

getAssessmentById(id: number): Observable<MotorAssessorReport> {
  const url = environment.endPoints.assessment.base + 
    environment.endPoints.assessment.assessmentById + id;
  return this.httpClient.get<MotorAssessorReport>(url)
}

async getAssessmentByIdAsync(id: number): Promise<MotorAssessorReport> {
  const url = environment.endPoints.assessment.base + 
    environment.endPoints.assessment.assessmentById + id;
   const data = await this.httpClient.get<MotorAssessorReport>(url).toPromise();
  return data;
}

第一种方法,getAssessmentById返回 observable .第二种方法,getAssessmentByIdAsync , 返回 promise .
subscribeToAssessment() {
 this.assessmentService.getAssessmentById(this.assessmentId).subscribe(result => 
 {
    this.assessment = result;
 });
}

async fetchAssessment() {
  this.assessment = await this.assessmentService.getAssessmentByIdAsync(this.assessmentId);
}

我一直使用第一种方法,返回 Observable<T> ,并订阅我的调用代码。

我最近才真正开始明白,只有当您期望返回多个结果时,才应该真正使用这种方法。换句话说,当使用 Promise<T> 时,回调被调用的最大数量,只有一次。

由于我一直期望我的服务器总是只返回一次,我的方法是否错误,我应该使用 Promise<T>方法,结合 async/await ?

最佳答案

  • 如果您使用该服务来连续获取值,请使用可观察对象。
  • 如果您只需要获取一次数据,请使用 promise 。您需要取消订阅可观察对象,否则会导致内存泄漏。
  • 仅在必要时使用异步等待,以防您的代码造成回调困惑。
  • 关于angular - Observable.subscribe() 与带有 async/await 的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883785/

    相关文章:

    angular - Angular 6中的FontAwesome图标?

    javascript - 我如何知道 IDBCursor 达到了它的最后一个值?

    javascript - 为什么这个错误没有出现在我的 Redux Action 的 Catch 中?

    rxjs - withLatestFrom 不发出值

    javascript - Rx.js,使用Subject从Observable进行多播

    angular - 验证数组中的对象也存在于可观察数组中

    angular - 如何为生产捆绑 Angular 应用程序

    angular - 使用导入模块对 angular2 组件进行单元测试

    javascript - Angular 检查数组是否包含具有特定变量值的对象

    javascript - Promise/A+ with chain then() 回调用例?