繁体   English   中英

在Angular 6中按顺序执行http请求

[英]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

使用reduceswitchMap

['url 1', 'url 2'].reduce((acc, curr) => acc.pipe(
  mergeMap(_ => this.mockHttpCall(curr)),
  tap(value => console.log(value)),
), of(undefined)).subscribe(_ => console.log('done !'));

Stackblitz

如果您不熟悉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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM