【发布时间】:2019-09-16 22:08:31
【问题描述】:
考虑在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?
【问题讨论】:
-
注意:您过度使用异步/等待。您可以使用返回承诺的普通函数实现相同的目的。
-
我想我可能会。什么时候适合使用它们?
-
当您需要在获得已解决的承诺后执行操作以便以某种方式最终确定您想要返回的值——这可能包括等待另一个承诺——然后使用
await。但是,如果您只是想像得到它一样返回一个承诺,那么就不需要async/await。 -
我在这里发布了简化代码,但在我的情况下我需要等待,因为我需要执行停止(等待),直到设置“评估”属性。
标签: angular promise rxjs observable