Путаница вокруг понимания разницы между наблюдаемым и объектом в RX - PullRequest
0 голосов
/ 11 декабря 2019

Прочитав большое количество сообщений о переполнении стека, я все еще очень озадачен разницей между Observable и Subject в Rx.

В основном, большинство людей отмечают, что ключевое различие между ними состоит в том, что« Класс Subject наследует и Observable, и Observer в том смысле, что он является и наблюдателем, и наблюдаемым », и это можно продемонстрировать с помощью следующего фрагмента кода:

var subject = new Rx.Subject();

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted

Я понимаю, что в следующей части кода субъект является ролью наблюдаемой, на которую можно подписаться:

var subscription = subject.subscribe(
function (x) { console.log('onNext: ' + x); },
function (e) { console.log('onError: ' + e.message); },
function () { console.log('onCompleted'); }
);

Что меня действительно смущает, так это эта часть:

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted

Похоже, что здесь демонстрируется, что субъект также может играть роль наблюдателя, но я понимаю, что здесь субъект также передает значения / события (отправка 1, 2 и полное событие). Так почему же субъект считает роль наблюдателя в приведенном выше коде ?

Большое спасибо.

1 Ответ

0 голосов
/ 13 декабря 2019

Считается, что субъект играет роль наблюдателя в ссылочном коде именно потому, что к нему обращаются onNext и onCompleted. Observer определяется как объект, для которого вы можете вызвать onNext и onCompleted (а также onError.)

...