Angular 中的异步/等待或可观察

myh*_*yhr 5 async-await angular

应该使用 async/await 或 Observable 中的哪一个来调用 Angular 上的后端服务?

使用async/await可以更方便地查看源代码,所以我想使用async/await。在这种情况下,我认为它可以与 Observable#toPromise 一起使用。

然而,Angular 的手册只显示了使用 Obseravable 的示例,那么我应该使用 Observable 吗?

dap*_*985 0

根据 Angular 文档,您应该使用 Observable。

Observables 为应用程序中的发布者和订阅者之间传递消息提供支持。与其他技术相比,可观察量在事件处理、异步编程和处理多个值方面具有显着的优势。

来源: https: //angular.io/guide/observables

上面引用的第二句话是关键,特别是提到“其他技术”,即承诺。

此外,查看 http 响应的值(源代码)并不困难。事实上,一旦订阅了 Observable,就可以访问这些值。

某事.service.ts

...
public getSomething(): Observable<HttpResponse> {
    return this._http.get<HttpResponse>('/api/something');
}
...  
Run Code Online (Sandbox Code Playgroud)

某些组件.ts

...
public getSomethingMethod() {
    this._somethingService.getSomething()
        .subscribe((res: HttpResponse ) => {
            // Do something with res (values are now visible)
        })
}
...
Run Code Online (Sandbox Code Playgroud)

  • @DaviDanielSiepmann 在大多数 API 响应上使用 `toPromise` 可能没问题,尽管您需要开始使用 `lastValueFrom` 因为 `toPromise` 已被弃用。也就是说,如果您决定以后要使用 RxJS 运算符,那么如果您继续将它们用作 Observables 并订阅,那么您将需要进行更多重构。就我个人而言,我发现 Observables 对于重试“503 Service Unavailable”以及使用“retryWhen”运算符从“Retry-After”标头计算出的延迟非常有用。 (2认同)