rxjs 做一个冷 obs 存储所有消息

rxjs does a cold obs store all messages

阅读时 an intro to rxjs 我来看了下面的内容,有点担心

the second subscription will restart the sequence from the first value.

如何从第一个值开始?它是否将所有值存储在内存中?这对我来说可能是一个真正的问题,因为我在将保持 运行 的 worker/service 中使用它。因此,如果它坚持下去,那么我将面临巨大的打击。

标准订阅不缓冲任何值。一些运算符(和主题)确实需要缓冲一些值来实现它们的行为(并且该缓冲区可以是无界的)但这是一个不同于热与冷二分法的问题。

简短的解释是(冷)源可观察对象(最上游的可观察对象)知道如何生成它的值,但只有当他有订阅者时才会这样做。他为所有订阅者生成相同的值。所以没有缓冲,更像是价值的再生。例如,Rx.Observable.range(1,10) 知道它必须生成哪些值,并在有订阅者的任何时候生成它们。它不会在内存中保留 1,2,3...10 的缓冲区,只有 110 并在两者之间迭代以生成值。大多数冷可观察对象也是如此,它们有一个与之关联的值生成函数,并且该函数会为每个订阅者重新执行。

如果您想切换到可观察对象的行为,即它们在 receive/generate 时立即将它们的值推送给 reception/generation 时的所有现有订阅者,您必须转换你的冷观察到热。

要获得更深入的解释,请查看对应于冷热观测值的