Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度顺序HTTP Rest请求_Angular_Http_Rxjs_Angular Httpclient - Fatal编程技术网

Angular 角度顺序HTTP Rest请求

Angular 角度顺序HTTP Rest请求,angular,http,rxjs,angular-httpclient,Angular,Http,Rxjs,Angular Httpclient,我在Angular 8中有以下代码: fetchMedia(){ this.mediaDetails.forEach(条目=>{ this.fetchSingleMedia(条目);//需要按顺序执行此操作 } }); } 获取单一媒体(条目){ this.mediaService.getMedia(条目).subscribe( (数据)=>{ //我的逻辑在这里 }, 错误=>{} ); } 代码的其他部分也使用fetchSingleMedia方法。我想保留媒体本身的逻辑 现在,如果我必须依

我在Angular 8中有以下代码:

fetchMedia(){
this.mediaDetails.forEach(条目=>{
this.fetchSingleMedia(条目);//需要按顺序执行此操作
}
});
}
获取单一媒体(条目){
this.mediaService.getMedia(条目).subscribe(
(数据)=>{
//我的逻辑在这里
},
错误=>{}
);
}
代码的其他部分也使用
fetchSingleMedia
方法。我想保留媒体本身的逻辑

现在,如果我必须依次向
fetchSingleMedia
方法发出多个请求,那么我需要如何修改
fetchSingleMedia
方法和调用它的方式?可能使用async/await/promise或rxjs

编辑:


使用
concat
,在收到第一个请求的响应之前发送第二个请求。我希望第二个请求在收到第一个请求的响应后执行

使用
concat
顺序运行一个观察数组

发件人:

按照前面完成的顺序订阅观测值

首先构建观测值数组,然后在
concat
中按顺序运行它们

fetchMedia(){
const observables=this.mediaDetails.map(条目=>{
返回此.fetchSingleMedia(条目);
});
concat(…可观察到的)。订阅(singleMedia=>{
console.log(singleMedia);
},
错误=>{
});
}

fetchSingleMedia(条目):可观察的

您将其顺序化是什么意思?你是说同步?反应式编程以订阅结束…不要在fetchSingleMedia中订阅,而在fetchMedia中使用类似forkJoin的东西。呃,请不要仅仅因为你还不完全了解RxJS就使用承诺,这会导致难看的代码,混合和匹配承诺和可观察性。@Shravan,我是说在一段时间内一个接一个地使用承诺loop@user5155835如果一次提取失败,您希望发生什么?为什么一个接一个(如果是为了保护后端,请求之间的延迟是否足够?)@AndrewAllen即使第一个请求失败,也应该发出第二个请求。仅此而已,第二个请求应该在第一个请求完成后发出。这也是细粒度控制的物质化和非物质化(高级RxJS),并允许剩余的观测值通过流而不受错误的阻碍。即使第一个请求失败,第二个请求仍然会发出,对吗?@user5155835您可以随意设置。是否希望所有请求都运行,即使第一个请求失败?是的,所有请求都应该运行,即使任何一个请求失败,这就是我的示例将要做的。在stackblitz中,我从一系列整数中设置了一个
concat
#2抛出一个错误,但仍然可以看到数字3+。