【问题标题】:RxJS, operator to apply an function on observable depending on it's positionRxJS,运算符根据其位置在可观察对象上应用函数
【发布时间】:2018-11-26 19:54:20
【问题描述】:

假设我有可观察的 X、Y 和 Z。是否有一个 RxJS 运算符,它根据每个动作的位置应用动作,就像这样:

concat(x, y, z).pipe(someOperator(a, b, c)).subscribe(done);

所以X 发出的值将由A 处理,Y 的值将由B 处理等等。

【问题讨论】:

  • 根据你的描述,你不是真的想concat(x.pipe(map(a)), y.pipe(map(b)), z.pipe(map(c)))吗?
  • 并非如此。在最坏的情况下,它可能会有所帮助,但我想生成更少的代码,例如 concat(x.pipe(map(a)), y.pipe(map(b)), z.pipe(map(c)))。
  • 你是说这不是你想要的结果,还是你不想那样写?您将不得不在串联的上游进行,因为下游您不知道值来自哪个来源。
  • 我不想这样写。
  • 如果请求彼此独立,那么您不应该将它们连接起来。 concat 对组合流施加特定的排序。 @jonrsharpe 的评论是您所写问题的答案,但您的问题似乎与您要解决的问题不匹配。

标签: javascript rxjs


【解决方案1】:

你可以像下面这样简单,但是如果它是一个频繁的操作,你可以创建你自己的操作符

from([{obs:z, fn:a},{obs:y, fn:b},{obs:z, fn:c}]).pipe(
mergeMap(({obs,fn})=>obs.pipe(map(value=>fn(value))
).subscribe();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2016-06-18
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多