在 promise 请求中使用 async/await 是不是更有效? [关闭]
Posted
技术标签:
【中文标题】在 promise 请求中使用 async/await 是不是更有效? [关闭]【英文标题】: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。
【参考方案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 这样的东西以上是关于在 promise 请求中使用 async/await 是不是更有效? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 promise 请求中使用 async/await 是不是更有效? [关闭]