观察者对异步插入器的优势

时间:2019-06-28 03:34:13

标签: javascript ecmascript-6 rxjs reactivex

Observables通过异步方式推送其数据,我对它们与拉取数据的对象(即异步可迭代)的比较感兴趣。

我遇到了这个ReactiveX article

  

您可以将Observable类视为等同于Iterable的“推”,即“拉”。使用Iterable,使用者从生产者和线程块中拉出值,直到这些值到达为止。相比之下,使用Observable时,只要值可用,生产者就会将值推送给消费者。 这种方法更加灵活,因为值可以同步或异步到达

特别是,我不明白最后引用的那一行。有人可以解释一下推压的好处吗?

2 个答案:

答案 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编码的方式,我很喜欢它!