gpt4 book ai didi

javascript - 如何解释 Observable.of(Math.random()) 总是返回相同的值?

转载 作者:行者123 更新时间:2023-11-28 14:10:07 25 4
gpt4 key购买 nike

我不太确定如何解释它。 of() 方法返回的 observable 不是多播的。如果我们这样做:

const obs = of(Math.random()).pipe(tap(()=>console.log('side effect'));
obs.subscribe(console.log);
obs.subscribe(console.log);
obs.subscribe(console.log);

我们会看到 3 个副作用,但 3 个也具有相同的值。为什么?通常,每个订阅都会重新计算可观察量。

例如

new Observable(observer => observer.next(Math.random()))

将返回 3 个不同的值。为什么使用静态“of”方法创建的可观察对象的行为有所不同?我不知道如何解释。它与可观察缓存有什么关系吗?

编辑这是帮助我证明“of”可观察量确实是按需加载的小例子。

const obs = of(undefined).pipe(
map(() => Math.random())
);

甚至

const obs = of(Math.random).pipe(
map(random => random())
);

最佳答案

如果您要调用 of(0.5),那么 of 会看到您传递了 0.5,并基于此创建一个可观察值。每个新的订阅都会导致可观察对象发出值 (0.5),然后完成。

如果您将其更改为 of(0.25 * 2),则 of 仍然会看到您传递了 0.5,因此其行为完全相同。事先确实进行了计算以创建 0.5,但 of 对此一无所知。

如果将其更改为 of(Math.random()) 并且计算出的值为 0.5,则行为再次完全相同。 of 传递了 0.5,因此它创建了一个输出 0.5 的 observable,然后完成。它不知道 0.5 是如何计算的。

关于javascript - 如何解释 Observable.of(Math.random()) 总是返回相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59886076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com