首页 > 解决方案 > 等待最后一次订阅结束

问题描述

我有以下设置:

    let result = service.getResults();

    result.data.forEach((row:any) => {
          this.myService
            .getObject(row.id)
            .subscribe((object:any) => {
              //...
            })
        );
      }

我想做点什么,在所有的订阅getObject(row.id)都完成之后。我知道有这个add()功能,但它会为每个订阅执行此操作。来自 Promise,我将存储每个 Promise,然后存储在一个数组中,然后调用 Promise.all()。

标签: angulartypescriptrxjsobservable

解决方案


在 getObject(row.id) 的所有订阅都完成之后,我想做点什么。

最好使用forkJoin作为您的示例。来自官方文档:

forkJoin 将等待所有传递的 Observables 完成,然后它将发出一个数组,其中包含来自相应 Observables 的最后一个值。

尝试以这种方式进行:

import { forkJoin } from 'rxjs';

const rowObjects$ = result.data.map(rd => this.myService.getObject(rd.id));

forkJoin(rowObjects$)
  .subscribe((object:any) => {
    //...
  })

推荐阅读