Observables通过异步方式推送其数据,我对它们与拉取数据的对象(即异步可迭代)的比较感兴趣。
我遇到了这个ReactiveX article
您可以将Observable类视为等同于Iterable的“推”,即“拉”。使用Iterable,使用者从生产者和线程块中拉出值,直到这些值到达为止。相比之下,使用Observable时,只要值可用,生产者就会将值推送给消费者。 这种方法更加灵活,因为值可以同步或异步到达。
特别是,我不明白最后引用的那一行。有人可以解释一下推压的好处吗?
答案 0 :(得分:1)
可观察对象异步推送数据
那是不正确的。可以是同步的也可以是异步的
[Symbol.iterator]
,而不是新的ES2015 [Symbol.asyncIterator]
。
这种方法更加灵活,因为价值可以到达 同步或异步
因此,与[Symbol.iterator]
相比,Observable不会阻塞线程,并且可以同时在同步和异步源上工作。
可观察到与[Symbol.asyncIterator]
相比,是MDN的重要一句话:
当前没有内置JavaScript对象具有 默认设置[Symbol.asyncIterator]键
所以[Symbol.asyncIterator]
与Observable
:
[Symbol.asyncIterator] :
const myAsyncIterable = new Object();
myAsyncIterable[Symbol.asyncIterator] = async function*() {
yield "hello";
yield "async";
yield "iteration!";
};
(async () => {
for await (const x of myAsyncIterable) {
console.log(x);
// expected output:
// "hello"
// "async"
// "iteration!"
}
})();
可观察:
of('hello', 'async', 'iteration!').subscribe(console.log)
答案 1 :(得分:1)
使用Rx,您的编程范例将发生变化,数据将通过Streams流动。
它改变了处理数据的方式,从“拉”数组中的值并对其进行处理,以期望在整个过程中“推”数据。 Rx允许您进行流过滤,映射,以不同方式对数据进行去抖动的操作,并且还可以根据需要异步映射数据。
今年,我改变了使用Rx编码的方式,我很喜欢它!