gpt4 book ai didi

javascript - RxJS如何创建或模拟异步?

转载 作者:行者123 更新时间:2023-12-03 12:27:08 25 4
gpt4 key购买 nike

我在理解RxJS Observables和Subjects的执行模型/顺序时遇到问题。
我读了很多有关RxJS可观察对象的更好的文献和博客文章,因为它们的订阅可以取消,并且可以通过next()发出多个结果/值,因此是更好的 promise 。

这个问题可能很容易回答,但是RxJS如何创建或模拟异步?
RxJS Observables是否包装 promise 并创建 promise 序列以使代码执行异步?还是因为实现了可观察的模式,更改才能异步传播给订户,而代码执行仍然是同步的?

以我的观点,当通过事件循环处理的任何JavaScript回调队列中的回调处理JavaScript代码时,它都是异步的。

最佳答案

我相信RxJS不会在内部在Promises上运行。这就是整个发布-订阅模式的工作方式。如果简化,基本上您将拥有Observer,Observable和Subscriber。如果您创建了自己的可观察对象,那么您会发现基本上可以将其包装起来: promise ,事件,http甚至是同步代码,例如读取数组。实现的方式是Observer具有nextcomplete方法(但不限于它们,例如,也有错误)。每当您在Observer上调用.next()时,所有Observable的订阅者都会调用onNext。这是因为通过Observable Observer连接到订户,并且每当您调用.next()时,它将调用onNext。其中onNext以及onErroronComplete只是您在调用.subscribe()时提供给订户的回调。这意味着,如果您在Promise解析后调用.next(),它将是异步的。

这是一个例子:

new Observable<T>((observer: Observer<T>) => {
Promise.resolve(() => {
observer.next()
observer.complete()
})
})

如果您订阅此可观察的内容,它将异步调用您的 onNext
但您也可以执行以下操作:
const array = [1,2,3,4,5]
new Observable<T>((observer: Observer<T>) => {
array.forEach((num) => observer.next(num))
observer.complete()
})

从理论上讲,订阅应该是同步的。但是您可以尝试一下。问题是rxjs还具有 Scheduler这样的东西,它允许您控制Observable的性质,但我相信也有一些限制。
还有一个 video of simple pattern implementation可以帮助您了解其工作方式。

关于javascript - RxJS如何创建或模拟异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110846/

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