angular - Angular 4 中的多个顺序 API 调用

标签 angular api http-post observable

我有一组图像对象。

console.info('gallery', galleryArray);

enter image description here

这个数组的长度可以不同。我必须对该数组的每个项目发出 POST 请求。下一个请求必须在上一个请求完成后才能执行。

所以我尝试像这样创建一个 Observable 请求数组:

  let requests: Observable<Response>[] = [];
  galleryArray.forEach((image) => {
    requests.push(this._myService.uploadFilesImages(image));
  });

  console.info(requests);

enter image description here

我的服务是这样的:

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()
  );
}

问题是如何执行这些请求,以便每个 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));

concatMap 运算符仅在当前迭代可观察对象完成后才会发出。您会在 subscribe block 中获得各个调用的结果。

在您的特定情况下:

 Observable.of(...galleryArray)
  .concatMap((image) => this._myService.uploadFilesImages(image))
  .subscribe((result) => console.log(result));

关于angular - Angular 4 中的多个顺序 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45814808/

相关文章:

angular - NGRX Effect 中的内存泄漏

javascript - 如何使用 Fetch 发布 x-www-form-urlencoded 请求?

json - Flutter - Http Json 响应

api - GitHub API : Get email addresses of all members of organization

swift - 我如何在另一个函数中使用retailId(来自 flatMapLatest)

ruby-on-rails - 测试基于 Rails 环境构建的 API

c# - 方法后变量设置为空

使用注入(inject)提供程序的 Angular 异步表单验证

angular - 如何在 Valor ngx-bootstrap 选项卡标题中创建复选框?

Angular 6 : Download file after getting File object from backend server