我有一个返回问题数组的 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$;