gpt4 book ai didi

RxJS,理解延迟

转载 作者:行者123 更新时间:2023-12-02 09:59:14 24 4
gpt4 key购买 nike

我搜索了 RxJS 中 defer 的用法,但仍然不明白为什么以及何时使用它。

据我了解,在有人订阅之前,两种 Observable 方法都不会被触发。

如果是这样的话,为什么我们需要用 defer 包装 Observable 方法?

An example

我仍然想知道为什么它用 defer 包装 Observable?有什么区别吗?

var source = Rx.Observable.defer(function () {
return Rx.Observable.return(42);
});

var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); } );

最佳答案

很简单,因为Observables可以封装许多不同类型的源,并且这些源不一定必须遵守该接口(interface)。有些像 Promises 总是试图积极竞争。

考虑:

var promise = $.get('https://www.google.com');

本例中的 Promise 在连接任何处理程序之前就已执行。如果我们希望它更像一个 Observable,那么我们需要某种方式推迟 Promise 的创建,直到有订阅为止。

因此,我们使用 defer 创建一个 block ,该 block 仅在订阅生成的 Observable 时才执行。

Observable.defer(() => $.get('https://www.google.com'));

Observable 被订阅之前,上面的代码不会创建 Promise,因此其行为将更加符合标准 Observable 接口(interface).

关于RxJS,理解延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764578/

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