angular - rxJs forkJoin 不会从已完成的非空输入 Observables 中发出任何值
问题描述
这里的主要内容:两个输入 Observable 发出值,这些值不为空,并且它们都完成了。我还能错过什么?
this.availableHours$.subscribe(res => console.log(res));
this.selectedDays$.subscribe(res => console.log(res));
forkJoin([this.availableHours$, this.engagedTime$]).subscribe(() => console.log('hello'));
我检查了它们是否分别完成并发出值console.log
。结果是:
{ availableHoursByDay: undefined } // availableHours$
{ startDate: '23.09', endDate: '25.09' } // selectedDays
{ availableHoursByDay: uundefined } // availableHours$
{ availableHoursByDay: uundefined } // availableHours$
{ availableHoursByDay: { '23.09': 1,2,3,4, '25.09': 7,4,6 } } // availableHours$
并且 forkJoin 中的 'hello' 没有输出到控制台:(
所以看起来它们确实已经完成并且发出非空值。两个 Observable 都来自 store(它们是从 api 调用收到一个,从 routeParams 收到另一个,然后存储到 store)
我在这里还缺少什么?
更新。 根据评论(大家非常感谢),我发现商店 Observables 从未完成(几乎从未完成)。
所以现在我还有一个问题:
我需要跟踪更改selectedDays$
并仅获取最后一个发出的值availableHours$
(而不是未定义的属性)。只有最后一个。这是非常重要的,只有一个
我以这种方式实现了 combineLatest
combineLatest([this.selectedDays$, availableHours$.pipe(
filter(availableHours => !!availableHours.availableHoursByDay),
first()
))
.subscribe(([datesRange, availableHours]) => {
this.processBookingDatesChange(datesRange, availableHours);
});
但我一直在寻找更优雅的东西。我可以在这里做什么?
解决方案
forkJoin 在所有可观察对象都完成时发出,而不是在它们发出值时发出。这是一个很大的区别。
很可能你想要 combineLatest 的特性,它会在所有的 observable 发射后发射。
推荐阅读
- javascript - 如何在js时钟中添加刷新间隔
- node.js - npm 没有 sudo 就无法工作,get 找不到模块错误
- python - pandas 使用数字和字母的组合按系列对数据帧进行排序
- javascript - 使用 mongoose 和 nodejs 从数组中删除特定元素
- python - 弃用警告:使用 nominatim 和默认值
- java - 查询路径变量时出现内部服务器错误 jdbc
- elasticsearch - Elasticsearch 字段扩展匹配的字段太多
- r - 有没有办法用 R 找到 pbinom 的概率 p
- python - 第 7 行的错误
- javascript - 我对使用 fetch 的 jsonplaceholder 有疑问。它显示我身份不明。请尽快让我解决这个问题