Angular 如何等待不同的http请求接收响应(建议)

Angular 如何等待不同的http请求接收响应(建议),angular,rxjs,angular-httpclient,Angular,Rxjs,Angular Httpclient,在我的应用程序中,我需要在开始创建一些对象之前进行大量http调用。。。 因此,只有当所有http请求都收到来自服务器的结果时,我才能处理所有结果并构建我的页面 为此,我使用forkJoin实现了如下方法: let req1 = this.http.get<MyObject>('http:/whatever/getData1'); let req2 = this.http.get<MyObject>('http:/whatever/getData2');

在我的应用程序中,我需要在开始创建一些对象之前进行大量http调用。。。 因此,只有当所有http请求都收到来自服务器的结果时,我才能处理所有结果并构建我的页面

为此,我使用forkJoin实现了如下方法:

    let req1 = this.http.get<MyObject>('http:/whatever/getData1');
    let req2 = this.http.get<MyObject>('http:/whatever/getData2');
    let req3 = this.http.get<MyObject>('http:/whatever/getData3');
    let req4 = this.http.get<MyObject>('http:/whatever/getData4');

    this.searchSubscription = forkJoin([Observable.of(new Object()), req1,req2,req3,req4]).subscribe(
        results => {
            console.log("data loaded let's start...");
        },
        err =>{
            console.log("Something went worg:" + err);
        }
    );
let req1=this.http.get('http:/whather/getData1');
让req2=this.http.get('http:/whather/getData2');
让req3=this.http.get('http:/whather/getData3');
让req4=this.http.get('http:/whather/getData4');
this.searchSubscription=forkJoin([Observable.of(new Object())、req1、req2、req3、req4])。订阅(
结果=>{
log(“数据加载,让我们开始…”);
},
错误=>{
log(“出了问题:+err”);
}
);

这是正确的/最好的方法吗?

我认为这不是最好的方法之一,因为在obeservable的用例中,您将为每个订阅打开一个事件侦听器,如果您使用forkjoin,您将无法在组件销毁时关闭所有订阅,因此如果我可以说您应该选择更好的解决方案,如在服务的方法中划分观察对象,并逐个调用它们,这样您的请求将具有更高的可视性和洞察力,或者只需创建一个后端路由,立即为您提供来自所有这些请求的数据。对我来说,最好的方法是将观察对象转换为承诺并使用承诺

  let req1 = this.http.get<MyObject>('http:/whatever/getData1').toPromise();
    let req2 = this.http.get<MyObject>('http:/whatever/getData2').toPromise();
    let req3 = this.http.get<MyObject>('http:/whatever/getData3').toPromise();
    let req4 = this.http.get<MyObject>('http:/whatever/getData4').toPromise();

 const [res1,res2,res3,res4] = await Promise.all([req1,req2,req3,req4])
let req1=this.http.get('http:/whather/getData1').toPromise();
让req2=this.http.get('http:/which/getData2').toPromise();
让req3=this.http.get('http:/whather/getData3').toPromise();
让req4=this.http.get('http:/which/getData4').toPromise();
const[res1,res2,res3,res4]=等待承诺。全部([req1,req2,req3,req4])

正确:它能工作吗?贝斯特:你怎么判断呢?我没听你的评论,我的代码是有效的……那你为什么要问它是否正确?至于“最佳”,你的标准和限制是什么?同样,我没有得到你的评论,有些东西可以工作,但可以错误地实现…所以如果你的代码这样做,它是正确的。也许有“更好”的写作方法,但不知道更好对你意味着什么,怎么会有人告诉你呢?我明白你的意思,这是一个很好的方法。。。谢谢你的建议。后端是不同的微服务,我无法创建一个将所有结果合并为一个的新微服务。因此,如果我在某一点将不同的调用划分为不同的方法,我必须等待所有的结果,你会如何实现这一点?再次使用ForkJoin或使用另一种方法?我会使用this.http1subscription=this.service.http1.subscribe(http1=>{this.http2subscription=this.service.http2.subscribe(http2=>{…}})为什么您更喜欢promise来观察,其中有什么优势吗?你能解释一下吗?代码可读性更强,现在我正在编写web组件,并尝试使用更少的外部库。我继续使用Observable,但如果我可以在没有Rxjs库的情况下使用Observable,那么我更愿意这样做。