我使用Redux和RxJS Angular(4)实现来管理状态
我正在监听一个事件(产品列表中选定产品ID的更改),所以我们称之为selectedproductId$。
当相关发射器发出一个新的selectedId值时,我想从这个可观察值中执行一个开关映射
,以及从另外两个可观察值中发出的最新值(比如;productDetails$
和productComments$
)。
因此,触发更改应该是selectedproductID,我们将使用product详细信息和product注释的最新值执行SwitchMap
。
我试过这个:
// subscribed to the 3 observable passed in combineLatest
fetchProduct$: Observable<any>;
this.fetchProduct$ = Observable.combineLatest(
this.selectedProductId$,
this.productComments$,
this.productDetails$
).switchMap(
result => Observable.of(
{
'uuid': result[0],
'comments': result[1],
'details': result[2]
}
)
);
然后我订阅这个可观察的,并在传递的值上放置一个断点:
this.fetchProductSubscription = this.fetchProduct$.subscribe(result => this.someFn(value));
它可以工作,但每次三个观测值中的一个检测到状态变化时,它都会被调用。我也试着观察。forkJoin,但是从doc中,它等待三个可观察对象发出新的值,这使我在从另一个web服务获取评论时处于一种奇怪的状态,并且它可以在选择下一个产品Id时检索它。
可见的。合并也不是解决方案,因为它只会在一个“通道”上逐个发出值。
我不完全习惯于反应式编程,也许我没有清楚地看到一个明显的解决方案,但正确的知道我会喜欢一个提示或一些帮助来解决这个问题:(非常感谢
首先,让我们合并您不想触发任何更改的“额外”观测值。
const extras$ = Observable.combineLatest(this.productComments$, this.productDetails$);
现在,我们在我们的“有趣的”可观察范围内观察排放,并且只使用我们额外的最新值。
cosnt allTogether$ = this.selectedProductId$.withLatestFrom(extras$,
([uuid, [comments, details]]) => ({uuid, comments, details}) );
现在,您可以免费订阅all在一起$
。
请尝试使用LatestFrom,它的工作原理类似于
CombineTest()
,但每次激发源可观察对象时都会激发。示例(对于rxjs 5.5):
this.fetchProduct$ =
this.selectedProductId$.pipe(
withLatestFrom(
this.productComments$,
this.productDetails$
));
或对于早期版本:
this.fetchProduct$ =
this.selectedProductId$.withLatestFrom(
this.productComments$,
this.productDetails$
);
我不知道如何在我的。
好的,这是一个快速的,我已经有点累了,我在困惑自己: D 我正在使用angular2和RxJS观测设备。 我有一个带有属性“数据”的服务,这是一个在构造函数中设置的可观察对象,以及一个返回此可观察对象以订阅的方法。 前一段时间,我曾与replaySubject合作,总是向新订阅者发出序列的所有值。然而,通过上面的代码,可观测的似乎向新用户发出了它的最新值。这是有意的吗? 每次迭代我都会得到一个值。
本文向大家介绍system.reactive 为可观察值中的每个值选择一个新值,包括了system.reactive 为可观察值中的每个值选择一个新值的使用技巧和注意事项,需要的朋友参考一下 示例
我的代码是这样构造的- 我正在努力实现这一点: 方法1()返回地址时,我需要使用它并调用方法2()来更新MongoDB文档中的地址。也没有抛出异常。但是我没有看到任何日志在方法2() 代码: 虽然调用了method2(),但MongoDB中的文档更新没有发生。
问题内容: 我正在尝试联接2个表,但仅与一组记录中的最新记录联接。 左表: 部分 Part.PartNum 右表: 材料 Material.Partnum Material.Formula Material.RevisionNum 版本号从“ A”开始并增加。 我想加入PartNum的2个表,但只合并右边表中的最新记录。我已经看到了关于SO的其他示例,但是很难将它们放在一起。 编辑: 我发现第一个
问题内容: 我有两个表帐户和余额 我想加入这两个表并获取特定cid的最大日期余额。 输出结果为- 问题答案: 您需要使用两个子查询,如下所示: 输出: 客户编号 姓名 移动的 日期 平衡 1个 美国广播公司 12345 2013年9月20日00:00:00 + 0000 300 2个 XYZ 98475 2013年9月21日00:00:00 + 0000 600 看到这个SQLFiddle