Прочитав большое количество сообщений о переполнении стека, я все еще очень озадачен разницей между 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 и полное событие). Так почему же субъект считает роль наблюдателя в приведенном выше коде ?
Большое спасибо.