Angular 如何从请求返回HttpClient响应正文?

Angular 如何从请求返回HttpClient响应正文?,angular,typescript,angular-httpclient,angular-resolver,Angular,Typescript,Angular Httpclient,Angular Resolver,我有一个组件,它的内容依赖于API响应。我已经设置了解析器,但在数据准备就绪之前它仍然返回 如何使我的pull_categories()函数等待收到响应正文后返回?而不是返回一个空对象,因为它不会等待,甚至在我下面的例子中不会调用它 服务台 private_categories=[]; 构造函数(私有http:HttpClient){} 拉_类(){ this.http.post('https://myapi.com/something,空) .订阅( 数据=>{ 这是._categories

我有一个组件,它的内容依赖于API响应。我已经设置了解析器,但在数据准备就绪之前它仍然返回

如何使我的
pull_categories()
函数等待收到响应正文后返回?而不是返回一个空对象,因为它不会等待,甚至在我下面的例子中不会调用它


服务台

private_categories=[];
构造函数(私有http:HttpClient){}
拉_类(){
this.http.post('https://myapi.com/something,空)
.订阅(
数据=>{
这是._categories=数据['response'];
返回此。_类别;
}
);
}

组件技术

categories=[];
构造函数(专用路由:ActivatedRoute){}
恩戈尼尼特(){
this.route.data.subscribe(
(数据:数据)=>{
this.categories=data.categories;
}
);
}

分解器

构造函数(私有分类服务:分类服务){
解析(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot):可观察|承诺|任何{
返回此.categoriesService.pull_categories();
}

app-routing.module.ts

{
路径:“”,
组件:HomeComponent,
解析:{categories:CategoriesResolverService}
}

您正在从您的服务(以及您的解析器)返回一个
订阅,而不是返回一个可观察的订阅。不要订阅服务。并指定返回值,以避免击中自己的脚:

getCategories(): Observable<Array<Category>> {
  return this.http.get<Something>('https://myapi.com/something').pipe(
    map(something => something.response)
  );
}

getCategories():可观察指南和quide。

您从您的服务(以及您的解析程序)返回的是
订阅,而不是可观察的。不要订阅服务。并指定返回值,以避免击中自己的脚:

getCategories(): Observable<Array<Category>> {
  return this.http.get<Something>('https://myapi.com/something').pipe(
    map(something => something.response)
  );
}

getCategories():可观察指南和quide。

首先,在服务中。您不需要订阅,您应该在您想要实际使用数据的地方订阅
subscribe
方法返回
subscribe
,而不是来自http api的响应

您可以根据需要更新服务方法

pull_categories(): Observable<any> {
    return this.http.post('https://myapi.com/something', null);
}
pull_categories():可观察{
返回此.http.post('https://myapi.com/something,空);
}

pull\u categories
方法将立即返回一个可观察的
方法,当您在组件(或任何地方)中订阅它时,将执行http调用,并在
订阅
部分返回响应。

首先,在服务中。您不需要订阅,您应该订阅您想要实际使用数据的地方
subscribe
方法返回
subscribe
,而不是来自http api的响应

您可以根据需要更新服务方法

pull_categories(): Observable<any> {
    return this.http.post('https://myapi.com/something', null);
}
pull_categories():可观察{
返回此.http.post('https://myapi.com/something,空);
}

pull_categories
方法将立即返回一个可观察的
方法,当您在组件(或任何地方)中订阅该方法时,将执行http调用,并在
subscribe
部分返回响应。

从后端获取数据的另一种方法是不订阅数据,您还可以返回一个承诺,然后在组件中使用async Wait

pull_categories():任意{
返回此.http.post('https://myapi.com/something,null)。toPromise();

}
从后端获取数据的另一种方法是不订阅数据,您还可以返回承诺,然后在组件中使用async Wait

pull_categories():任意{
返回此.http.post('https://myapi.com/something,null)。toPromise();

}
您可以使用角度路由防护装置等待数据加载后再进入该页面。@PavanBahuguni这就是我正在尝试做的,但没有工作到目前为止。您可以使用角度路由防护装置等待数据加载后再进入该页面。@PavanBahuguni这就是我正在尝试做的,但没有工作,非常感谢您详细的帮助,我一定会记下来的。谢谢你的详细帮助,我一定会记下来的。