angular - 嵌套的可观察对象在终止后一个接一个地执行
问题描述
我正在实施角度解决方案以首先获取数据库中的所有项目,终止后我从数据库中获取当前选定的框,然后将项目映射到框。我需要对所有项目进行收费,然后让盒子在最后进行映射,我有以下代码可以工作,但通过嵌套 observables 有点脏,你们中的任何一个都有更清洁的解决方案吗?我在文档中找到了解决方案 os swithMap 但我认为这不适合我的情况,因为开关映射无法在上可观察到的情况下完成执行内部
this.getItems().subscribe(items => {
this.itemsInDataBase = items;
this.loadActiveBox().subscribe(box => {
this.selectedBox= box;
this.selectedBox?.versions.forEach((version, index) => {
this.itemsInDataBase.forEach((itemInDatabase, index) => {
version.items.forEach((item, index) => {
this.insertItemInbox(item, itemInDatabase, version);
}
);
});
});
grazie mille
解决方案
RxJSswitchMap
运算符可以用于内部可观察对象依赖于外部可观察对象的情况。在您的情况下,由于两个 observables 似乎是独立的,您可以使用该forkJoin
函数。
forkJoin({
items: this.getItems(),
box: this.loadActiveBox()
}).pipe(
tap({
next: ({items, box}) => {
this.itemsInDataBase = items; // <-- are these needed?
this.selectedBox = box;
}
})
).subscribe({
next: ({items, box}) => {
box?.versions.forEach(version =>
items.forEach(itemInDatabase =>
version.items.forEach(item =>
this.insertItemInbox(item, itemInDatabase, version)
)
)
)
},
error: (error: any) => {
// handle errors
}
});
推荐阅读
- r - read.dcf(path_desc) 中的 devtools 错误:开始的行“这对应于 ...”格式错误
- apache-spark - 从 CSV 读取字符串数组作为 Pyspark 中的数组
- ruby - Monkeypatch 数组并将数组元素设置为新值
- swift - 无法快速分享 pdf(仅限 WhatsApp)
- .net - 通常使函数调用超时(没有 Task/CancellationToken)
- reactjs - 如何动态改变material-ui的抽屉宽度?
- java - Java有时在读取文件时返回空字符串
- finance - *TradingView Pine* 止盈警报不起作用
- apache - 您可以将“/.html”的请求准确地重定向到 index.html 吗?
- java - 如何计算我的程序中的年差?