Оператор RxJs .first () (среди прочего) дополняет наблюдаемый источник? - PullRequest
0 голосов
/ 29 октября 2019

Если у меня есть следующий код:

const subject = new BehaviorSubject<[]>([]);
const observable = subject.asObservable();
subject.next([{color: 'blue'}])
observable.pipe(first()).subscribe(v => console.log(v))

Согласно документации:

Если вызывается без аргументов, сначала выдается первое значение источника Наблюдаемый, затем завершающий ....

Означает ли это, что наблюдаемый источник (в данном случае BehaviorSubject) завершается, и вы больше не можете его использовать? Так как вы больше не можете вызывать .next([...]) на нем.

Я пытаюсь понять, как можно завершить наблюдаемое, если на нем нет .complete() метода?

Я былпытаясь взглянуть на исходный код first(), который под прикрытием использует take(), а в свою очередь take() использует lift(), поэтому мне было любопытно, как-то первый оператор возвращает копию исходного наблюдаемого (субъекта) и завершаетчто.

1 Ответ

1 голос
/ 29 октября 2019

Наблюдаемый источник не завершается, завершается подписка. У вас может быть несколько подписок на ваш источник Observable, в вашем случае один BehaviorSubject.

subject.next([{color: 'blue'}])
subject.next([{color: 'red'}])
const subs1 = observable.pipe(first()).subscribe(v => console.log(v))
const subs2 = observable.subscribe(v => console.log(v))

В приведенном выше примере вы четко видите, что источник не завершает, только подписка.

Iсоздал Stackblitz, если вы хотите попробовать его: https://stackblitz.com/edit/rxjs-uv6h6i

Надеюсь, я получил ваше мнение!

Приветствия:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...