[英]Execute http request sequentially in Angular 6
我需要按顺序向服务器发送多个HTTP PUT请求(在完成上一个请求后才开始下一个请求,请求的数量不固定)。 如果我使用以下源代码,将发送所有请求
`listURL.forEach(url => {
const req = new HttpRequest('PUT', url, formData, { reportProgress: true});
httpClient.request(req).subscribe(event=>{});
});`
无论如何还是按顺序执行请求?
您可以使用与Promise
async / await来流式传输此行。 使用toPromise()
将observable转换为promise
async doSomethingAsync() {
for(let url of listURL) {
const req = new HttpRequest('PUT', url, formData, { reportProgress: true});
const result = await httpClient.request<ModelHere>(req).toPromise();
// do something with result
}
}
有关async / await的更多信息,请参阅此优秀答案并滚动到标题ES2017 +:使用async / await进行Promises 。
使用reduce
和switchMap
:
['url 1', 'url 2'].reduce((acc, curr) => acc.pipe(
mergeMap(_ => this.mockHttpCall(curr)),
tap(value => console.log(value)),
), of(undefined)).subscribe(_ => console.log('done !'));
如果您不熟悉rxjs,也许您可以尝试以下方法?
let requests = listURL.map(url => new HttpRequest('PUT', url, formData, { reportProgress: true});
function do_seq(i) {
httpClient.request(requests[i]).subscribe(event => {
if (i < requests.length - 1) do_seq(i + 1);
});
}
do_seq(0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.