重复http.post指定的次数(每次更改URL)?

时间:2017-05-11 13:56:32

标签: angular rxjs angular2-observables

我无法想出重复/循环Angular2(4)http.post请求指定(X)次数的正确方法。

让我举一个我希望实现的例子。我有以下http.post:

this.http.post(`http://url.com/param/name01`, dbJson, options)

我需要做的是使用单个可观察流来发布API X次,每次更改名称参数。我想要像这样硬编码:

this.http.post(`http://url.com/param/name01`, body, options)
.switchMap(() => this.http.post(`http://url.com/param/name02`, body, options)
.switchMap(() => this.http.post(`http://url.com/param/name03`, body, options)

有没有人可以透露使用观察者获得结果的最佳方法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用forkJoin来循环所有请求

来实现此目的
myNameRequest(): Observable<any> {
 let requests: any[] = [];
 let names: string[] = ['name1', 'name2', 'name3'];
 return Observable.forkJoin(names.map(name => this.http.post(`http://url.com/param/${name}`, body, options)))
}

如果您必须在每次请求或所有请求之后执行任何操作,您可以在地图/订阅中执行此操作,您可以了解它

https://coryrylan.com/blog/angular-multiple-http-requests-with-rxjs https://www.metaltoad.com/blog/angular-2-http-observables-and-concurrent-data-loading

答案 1 :(得分:1)

如果您需要一个接一个地执行一个请求,请使用concat。您可以使用params创建一个observable数组,并使用spread运算符将它们传递给concat。

let names = ['name01', 'name02', 'name03'];

let obs$ 
    = names.map(name=>Rx.Observable.of('path' + name));

Rx.Observable.concat(...obs$)
  .subscribe(x=>console.log(x));