AsyncIterable和Observable之间有什么区别?

问题描述 投票:0回答:1

最近我一直在挂这个话题。看起来AsyncIterables和Observables都具有类似流的质量,尽管它们的使用方式有所不同。

您可以像这样消耗异步迭代器

const myAsyncIterable = async function*() { yield 1; yield 2; yield 3; }

const main = async () => {
  for await (const number of myAsyncIterable()) {
    console.log(number)
  }
}

main()

您可以消耗这样的可观察物

const Observable = rxjs
const { map } = rxjs.operators

Observable.of(1, 2, 3).subscribe(x => console.log(x))
<script src="https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"></script>

我的首要问题基于此RxJS pr

如果可观察对象的发射速度快于循环完成的速度,则随着缓冲区变得更满,将建立一个内存。我们可以提供其他使用不同策略的方法(例如,仅使用最新值等),但将其保留为默认设置。请注意,循环本身可能有几个等待项,这使问题更加严重。

在我看来,异步迭代器本来就没有背压问题,因此在Observable上实现Symbol.asyncIterator(@@ asyncIterator)并默认为背压策略是否正确?根据AsyncIterables甚至需要Observables吗?

javascript ecmascript-6 promise rxjs observable
1个回答
0
投票

主要区别在于哪一方决定何时进行迭代。

对于异步迭代器,客户端通过调用await iterator.next()来决定。消息源决定何时兑现承诺,但客户必须先要求下一个值。

Observables注册一个回调函数,当有新值传入时,被Observable立即调用。

© www.soinside.com 2019 - 2024. All rights reserved.