如何在 RxJs 管道内触发更改

时间:2021-02-08 17:36:00

标签: rxjs observable

我有一个返回问题数组的 API。现在,其中一些问题包含一个列表 ID,我需要调用 ngRx 选择器来获取可观察对象。根据列表的类型,我必须要么将该 observable 附加到该问题,要么将该 observable 的结果附加到该问题。目前,我通过遍历问题数组并在 for 循环中修改问题来做到这一点。但是这种方法的问题是,如果内部 observable 被延迟解析,则外部 observable 的使用者不会得到通知。如何确保在解决内部 observable 时触发外部 observable。

    const shape$ : Observable<Question[]> = service.getReportFormShape();

    const newShape$ : Observable<Question[]> = shape$.pipe(
      map((questions) => {
        questions
          .filter((q) => !!q.listInfo)
          .forEach((q) => {
            if (!!q.listInfo.source) {
              const listObservable = this.listStore.select(
                fromList.getDropListById(q.listInfo.source)
              );

              if (q.listInfo.format === 'picklist') {
                q.listObservable = listObservable;
              } else {
                listObservable
                  .pipe(
                    filter((list) => !!list),
                    take(1)
                  )
                  .subscribe((list) => {
                    console.log(list);
                    q.options = formatDroplist(
                      list.Data,
                      q.listInfo.valueColumn,
                      q.listInfo.defColumn
                    );
                  });
              }
            }
          });
        return questions;
      })
    );

    return newShape$;

0 个答案:

没有答案