Angular9 http.get()给出未定义的

Angular9 http.get()给出未定义的,angular,typescript,http,get,Angular,Typescript,Http,Get,我搜索了更多关于这个论点的结果,但没有一个答案对我有帮助。我试图使用firebase的url在angular中执行http.get(): 正如您可以尝试的那样,它可以返回json。我尝试了不同的方法,但结果还是“未定义”。现在,我正在尝试以下模式: 从'@angular/core'导入{Injectable}; //首先安装rxjs:npm安装rxjs compat--保存 从“rxjs/Observable”导入{Observable}; 从“../../models/book/book.

我搜索了更多关于这个论点的结果,但没有一个答案对我有帮助。我试图使用firebase的url在angular中执行http.get():

正如您可以尝试的那样,它可以返回json。我尝试了不同的方法,但结果还是“未定义”。现在,我正在尝试以下模式:

从'@angular/core'导入{Injectable};
//首先安装rxjs:npm安装rxjs compat--保存
从“rxjs/Observable”导入{Observable};
从“../../models/book/book.model”导入{BookModel};
从'rxjs/Subject'导入{Subject};
从'@angular/fire/firestore'导入{AngularFirestore};
//从“angularfire2/firestore”导入{AngularFirestore};
//se非演示者:npm安装@angular/http@latest
从'@angular/Http'导入{Http};
//从'@angular/common/http'导入{HttpClient};
从“rxjs/operators”导入{map};
@注射的({
providedIn:'根'
})
出口级货运服务{
private emit addtocart=新主题();
AddCommitted$=this.emitAddToCart.asObservable();
//http请求(https://firebase.google.com/docs/firestore/use-rest-api)httprequest示例
硬编码https://firestore.googleapis.com/v1/projects/angularfirebasegb/databases/(默认)/文档/cart?key=aizasydnw48hamvh8eazpbeflrkbkhy5blzsqg';
构造函数(私有数据库:AngularFirestore,私有http:http){}
查询(){
//允诺
//在Firebase中获取存储在购物车中的值
返回此.db.collection('/cart').valueChanges();
}
添加(数据){
//这将把一些项目放入项目集合,将数据存储在firebase中
让item=this.db.collection('/cart').add(data.getData());
//下一步将为我们做所有的保存(但名称很奇怪)
此.emitAddToCart.next(项目);
退货项目;
}
更改(书籍:BookModel){
这个.emitAddToCart.next(书);
}
httpCall(){
调试器;
//返回this.http.get(this.hardCodeUrl);
返回this.http.get(this.hardCodeUrl).pipe(map(data=>{})).subscribe(result=>{
控制台日志(“RISULTATO”+结果);
});
}
}
您的映射管道
.pipe(map(data=>{}))
正在使其返回未定义:

return this.http.get(this.hardCodeUrl).subscribe(result => {
    console.log("RISULTATO", result);
});
这将返回每个对象

map操作符将给定的项目函数应用于源可观察对象发出的每个值,并将结果值作为可观察对象发出。获取每个值并返回一个空对象作为结果

我更喜欢返回服务中的可观察值:

httpCall() {
   return this.http.get(this.hardCodeUrl);
}
并从需要此值的组件订阅:

this.service.httpCall().subscribe((res) => {
   console.log("res", res);
});
如果您需要进行一些转换,您仍然可以在服务器上进行转换,并返回可观察的:

httpCall() {
  return this.http.get(this.hardCodeUrl).pipe(
    map((res: { documents: any }) => {
      return res.documents;
    })
  );
}
这将返回一个可观察值,其中包含原始响应的documents属性的值


也许我发现了问题。。。。我必须理解如何使用@angular/common/http而不是@angular/http重写代码……这个问题是由不推荐引起的。但现在我有另一个问题:“this.handler.handle不是函数”我知道了,我不知道这一点。事实上,我最近才学会了。。。我还在学。在某些情况下,此处理程序错误似乎也与导入或模块配置有关。我将尝试创建一个stackblitz并共享它,以防它有所帮助。这里有:它在有映射和没有映射的情况下进行调用,并在控制台中记录api调用的结果。我希望这能有所帮助。它能工作,问题是我的测试模块!它就像你的代码!谢谢