【问题标题】:Is using async/await in promise request more efficient? [closed]在 promise 请求中使用 async/await 是否更有效? [关闭]
【发布时间】:2022-01-11 06:40:16
【问题描述】:

提出请求的最佳方式是什么?

我在project.service.ts 中有一个http request 方法。我可以使用以下结构提出请求:

getProjectById(projectId: number) {
  return this.http.get<Project>(`${this.url}/search/projects/${projectId}`).toPromise();
}

并在project.component.ts 中使用以下结构调用它:

async getProject(projectId: number) {
  this.isLoading = true;
  try {
    this.project = await this.api.projects.getProjectById(projectId);
  } finally {
    this.isLoading = true;
  }
}

但我也可以这样提出请求:

async getProjectById(projectId: number) {
  return await this.http.get<Project>(`${this.url}/search/projects/${projectId}`).toPromise();
}

或者这个:

getProjectById(projectId: number): Observable<Project> {
  return this.http.get<Project>(`${this.url}/search/project/${projectId}`);
}

但我必须subscribe 才能使用此功能。

【问题讨论】:

  • 您的第二个getProjectById sn-p(带有async 关键字)与第一个sn-p 的工作方式完全相同,那么为什么还要让它变得更复杂呢?
  • @Bergi 我只想知道它们之间的区别。例如,如果我使用第二个getProjectById,是否仍然需要在我的project.component.ts 中使用异步?还是通过第一种带有异步功能的方法更好?
  • @Bergi 不仅如此,使用Observables 更好吗?
  • 简短回答 async await 是 promise 的语法糖,没有任何改变,它们在幕后的工作方式完全相同
  • @RobertodeLeón 没有区别。它仍然返回项目响应的承诺,是的,您仍然必须使用getProject 中的await 处理它。至于 observables 与 promises,这是非常基于意见的,之前也是 has been asked multiple times

标签: javascript angular typescript http async-await


【解决方案1】:

这与其说是效率问题,不如说是代码设计和代码整洁的问题。 我认为遵循 Angular 内置 Http 模块的指南。

您需要保持代码干净,并遵循 RxJS 流程,而不是将其转换为异步代码。

所以你需要使用这个:

getProjectById(projectId: number): Observable<Project> {
  return this.http.get<Project>(`${this.url}/search/project/${projectId}`);
}

如果你没有理由,不要把它复杂化。

【讨论】:

  • 我不使用Observables 的一个例子是,在应用程序流中,第二个请求在第一个请求之前到达API,这导致覆盖新信息。
  • 我曾因在 Angular 上使用 Promises 而被枪杀几次。在我看来,如果你的数据没有改变,我会承诺。但是,如果数据发生变化(例如,从使用 Websocket 获取实时数据的 API 请求),Observable 是要走的路,如果不是,Promises。再次......我的拙见。
  • @RobertodeLeón 我不完全明白你的意思,因为 RxJS 是一个安静的大库,有很多选择。请注意,你有管道——还有像 Merge 这样的东西
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2020-07-14
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多