Преимущества наблюдаемых для асинхронных интеграторов - PullRequest
4 голосов
/ 28 июня 2019

Observables проталкивают свои данные асинхронно, и меня интересует, как они сравниваются со своим аналогом, который извлекает данные, а именно с асинхронной итерацией.

Я наткнулся на эту статью ReactiveX

Вы можете думать о классе Observable как о «push», эквивалентном Iterable, который является «pull». С Iterable потребитель извлекает значения из источника и блоков потока, пока эти значения не поступят. В отличие от этого, с помощью Observable производитель отправляет значения потребителю, когда они доступны. Этот подход более гибкий, потому что значения могут поступать синхронно или асинхронно .

В частности, я не понимаю эту последнюю цитируемую строку. Может ли кто-нибудь объяснить, что такое предполагаемое преимущество толчка?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

С Rx ваша парадигма программирования меняется, и ваши данные передаются через потоки.

Это меняет способ манипулирования данными, начиная с "извлечения" значений из массивов и их обработки, чтобы ожидать, что данные будут "выталкиваться"через ваш процесс.Rx позволяет вам поиграть с потоковой фильтрацией, отображением, разбором ваших данных различными способами, а также асинхронным отображением ваших данных, если вам нужно.

В этом году я изменил способ кодирования с использованием Rx, иЯ люблю это!

1 голос
/ 28 июня 2019

Наблюдаемые проталкивают свои данные асинхронно

Это не правильно. Может быть как синхронным, так и асинхронным


Цитата в вашем сообщении указывает на [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)

...