Luc*_*nik 5 api http-post observable angular
我有一组图像对象.
console.info('gallery', galleryArray);
Run Code Online (Sandbox Code Playgroud)
这个数组的长度可以不同.我必须对此数组的每个项目发出POST请求.只有在上一个请求完成后才能执行下一个请求.
所以我试着像这样制作一个Observable请求数组:
let requests: Observable<Response>[] = [];
galleryArray.forEach((image) => {
requests.push(this._myService.uploadFilesImages(image));
});
console.info(requests);
Run Code Online (Sandbox Code Playgroud)
我的服务如下:
uploadFilesImages(fileToUpload: any): Observable<any> {
const input = new FormData();
input.append('image', fileToUpload);
return this.uploadHttp.post(`${this.endpoint}`, input)
.map(
(res: Response) => res.json()
);
}
Run Code Online (Sandbox Code Playgroud)
问题是如何执行这些请求,以便每个api调用仅在之前完成之后才会执行?请帮忙.我是Angular的新手.
您正在寻找concatMap运营商:
例
const apiRoot = 'https://jsonplaceholder.typicode.com/';
const urls = [];
for (let i = 0; i < 500; i++) {
urls.push(apiRoot + 'posts/' + (i + 1));
}
Observable.of(...urls)
.concatMap((url: string) => this.http.get(url))
.subscribe((result) => console.log(result));
Run Code Online (Sandbox Code Playgroud)
该concatMap运营商只有在当前迭代上观察到的是完整的发射.您将获得subscribe块中单个调用的结果.
在您的特定情况下:
Observable.of(...galleryArray)
.concatMap((image) => this._myService.uploadFilesImages(image))
.subscribe((result) => console.log(result));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4739 次 |
| 最近记录: |