rxjs mapTo操作符:在运行时计算返回值

rxjs mapTo操作符:在运行时计算返回值,rxjs,Rxjs,假设有一个像上面这样的简单代码。我尝试的是在源流发出某些信息时记录值,但显然,我记录的值与源流的值无关。因此我考虑使用mapTo操作符,如下所示: function c() { return Math.random(); } source$.pipe( map(a => c()) ).subscribe(v => console.log(v)); 但正如你可能猜到的,值总是一样的。更准确地说,它保持为第一个值,这不是我想要的 所以我的观点是,我希

假设有一个像上面这样的简单代码。我尝试的是在源流发出某些信息时记录值,但显然,我记录的值与源流的值无关。因此我考虑使用
mapTo
操作符,如下所示:

  function c() {
     return Math.random();
  }

  source$.pipe(
    map(a => c())
  ).subscribe(v => console.log(v));
但正如你可能猜到的,值总是一样的。更准确地说,它保持为第一个值,这不是我想要的

所以我的观点是,我希望每次源发出一个我在求值时不使用的值时都执行求值。通过使用
map
操作符,我可以让它像第一个代码一样工作,但是当我不使用源流中的值时,使用
map
似乎是不对的。像这样使用
map
可以吗?或者使用
mapTo
或其他方法解决此类问题?如有任何见解,将不胜感激

根据,
mapTo
在每次源可观测物发出值时,在输出可观测物上发出给定的常量值

因此,您描述的行为是预期的行为。每次保存并发出来自
Math.random()
的第一个求值


在这里使用
map
来获得您期望的随机值似乎没有什么错。

您的用例真的涉及随机数吗?还是其他形式的外部状态?最好避免外部状态,因此我觉得您的问题可能还有更多。@cartant它不涉及随机数,但我想返回一个每次都需要计算的值,但与源流中的值无关。我认为您使用
map
做的很好。如果您不需要来自可观察源的值,您可以通过根本不将其包含在参数
map(()=>c())
。比mapTo短:
source$.pipe(map(c))
@martin Gotcha!谢谢。是的,我也这么认为,但是当使用
map
操作符时,我还是忍不住觉得不使用源流中的值是错误的/尴尬的。每个项目都是独一无二的,每个用例也是如此。如果您想在源发射时发射一个随机值而不关心源值,那么使用map可能是一种方法。忽略源的值没有任何问题。这也不是异国情调——它经常发生。可观察对象有一个数据和一个时间分量,忽略该参数仅仅意味着您只对时间分量感兴趣。“这没什么问题。@IngoBürk谢谢你的洞察力!
  function c() {
   return Math.random();
  }

  source$.pipe(
    mapTo(c())
  ).subscribe(v => console.log(v));