【问题标题】:Await before returning the observable in Angular HttpClient在返回 Angular HttpClient 中的 observable 之前等待
【发布时间】:2020-10-25 20:35:24
【问题描述】:

我有一个 Angular 服务方法,它调用 HttpClient get 方法,如下所示

searchItem(name: string) {
  const headers = await this.getHeaders();
  return this.httpClient.get<Item[]>(environment.itemService + `items/searchByItem/${name}`, {headers: headers});
}

到目前为止,我一直在不使用标头的情况下使用它,并且在我订阅每个这样的方法的组件中。

现在我必须为标头调用此 getHeaders() async 方法并在调用 API 之前设置它们。 所以问题是第一行返回promise,第二行返回Observable。我怎样才能像以前一样获取标头、调用 API 并返回一个 Observable 作为这个 searchItem 的最终结果?

【问题讨论】:

标签: angular promise async-await observable angular-httpclient


【解决方案1】:

await 仅在 async 函数中有效。 'await' 表达式只允许在异步函数中和模块的顶层使用。您需要在函数定义之前使用async

async searchItem(name: string) {
  const headers = await this.getHeaders();
  return this.httpClient.get<Item[]>(environment.itemService + `items/searchByItem/${name}`, {headers: headers});
}

或等待承诺使用then 方法完成请求,如下所示。

searchItem(name: string) {
   return this.getHeaders().then(headersVal => {
       return this.httpClient.get<Item[]>(environment.itemService + items/searchByItem/${name}`, {headers: headersVal});
  });   
}

【讨论】:

  • 我不能使用异步作为第一个解决方案,从那时起我也必须更改组件。所以我必须寻求像你提到的第二个这样的解决方案。所以现在在searchItem 方法中,它是否返回一个类似于没有标题的 Observable?
  • 您需要使用上面定义的两种返回方法。如果有任何问题,请告诉我。
  • 它仍然返回一个类似于httpClient.get 调用的 Observable 吗?既然我们要在then里面返回?
  • 是的,这就是你在问题中被问到的内容,对吧?
  • 是的 :) 但它不是又返回了一个承诺吗? getHeaders 的响应也应作为标头值应用:)
猜你喜欢
  • 2021-06-20
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多