javascript - 在 Angular 5 中继续循环之前等待 for 循环中的 observable 完成

标签 javascript angular rxjs observable

我正在遍历一组对象(称为项目)。 forEach 循环包含返回可观察对象的服务调用。我试图等待处理数组中的下一个项目,直到循环内的可观察对象完成。我应该使用什么?我已经尝试过 forkJoin。

projects
    .forEach(project => {
        this.imageService.getProjectImages(project.projectId.toString(), true, true, undefined)
            .catch(err => observer.error(err))
            .finally(() => {
                // process next project
            })
            .subscribe((image: FileRepresentation) => {
                data.image = image;
                this.getSlide(project, data);
            });
})

最佳答案

如果你想同时运行一个 Observable,并且只在前一个 Observable 完成后才开始下一个,那么 forkJoin 不是一个好的选择,因为它会立即订阅所有源 Observable。一种更好的方法是使用所谓的高阶 Observable 并使用 concatAll 一个接一个地订阅:

const projects = [
  Observable.of(1).delay(1000),
  Observable.of(2).delay(1000),
  Observable.of(3).delay(1000),
];

Observable.from(projects)
  .concatAll()
  .subscribe(console.log);

这通过创建延迟为 1 秒的 Observable 来模拟 HTTP 调用。如果运行此示例,您会看到它以 1 秒的延迟打印每个数字:

查看现场演示:http://jsbin.com/zocuma/3/edit?js,console

关于javascript - 在 Angular 5 中继续循环之前等待 for 循环中的 observable 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48593611/

相关文章:

javascript - 带手动输入的 Jquery 范围 slider

angular - TypeScript: '(error: any) => void' 类型的参数不可分配给类型的参数

javascript - 将 Angular Router 渲染 URL 粘贴到浏览器中?

angular - 无效管道参数 : '[object Object]' for pipe 'AsyncPipe' Angular 6 and FIrebase

javascript - 在 RXJS 中结合两个 ajax 响应

javascript - imagesURI 做了很多 promise 如何在这种情况下使用promise.all

javascript - Angular Material ng-消息未出现在对话框中

javascript - 使用 Jquery 从输入字段中获取值并将其分配给 PHP

Angular 4 : How do I generate an XML file and return it to the browser

javascript - RxJS 函数签名