Rx js как этот синтаксис действителен? - PullRequest
1 голос
/ 09 июля 2020

Привет в документации по Rx js Я вижу этот код:

first()(of(1, 2, 3)).subscribe((v) => console.log(`value: ${v}`));

// Logs:
// value: 1

Я знал, что это похоже на [1, 2, 3].map(x => x * x), но я бы знал, можем ли мы сделать то же самое с родным JavaScript, если Так что, пожалуйста, дайте мне пример?

мой вопрос:

Я не понимаю, как first () (of (1, 2, 3)) вы можете объяснить мне, как этот код возвращает наблюдаемое с оператором и источником? Я знал, что оператор - это первый (), а источник - из (), но как они объединяются вместе в новом наблюдаемом?

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 июля 2020

Выполнение first() возвращает функцию, которая принимает наблюдаемое и возвращает наблюдаемое.

Давайте разберем эту строку кода, чтобы ее было легче понять.

first()(of(1, 2, 3)).subscribe((v) => console.log(`value: ${v}`));

Следующее код эквивалентен приведенной выше строке:

const myFunction = first();
const source$ = of(1, 2, 3);

const output$ = myFunction(source$);

output$.subscribe(v => console.log(`value: ${v}`));  // value: 1

Итак, myFunction - это функция, а именно OperatorFunction, которая по существу выглядит так:

function myFunction(source: Observable): Observable { }

Как они сливаются вместе в новом наблюдаемом?

На самом деле они не «сливаются вместе», first() генерирует функцию, а затем вы выполняете эту функцию с source$ в качестве входного параметра.

Результирующий output$ - еще одна наблюдаемая, на которую можно подписаться.

1 голос
/ 10 июля 2020

first() - это операция, которая выполняется на (of(1, 2, 3). Результатом будет 1, поскольку первое значение 1, 2, 3 равно 1, и это именно то, что делает операция first() - она ​​принимает первое значение. Затем на этот наблюдаемый объект подписывается с цепочкой .subscribe() - и, таким образом, значение 1 - это то, что в конечном итоге выводится на консоль.

0 голосов
/ 10 июля 2020

Это не предполагаемый способ использования первого оператора, of(1, 2, 3).pipe(first()) - это то, как он предназначен для использования. Это работает, потому что сначала возвращает функцию, которая принимает наблюдаемое в качестве параметра.

...