두 개의 소스 옵저버 블이 있고 완료 여부에 관계없이 둘 중 하나가 값을 방출 할 때 무언가를하고 싶습니다.
const observable1$ = interval(1000);
const observable2$ = interval(2000);
const onEither$ = merge([
observable1$,
observable2$,
]);
observable1$.pipe(tap(() => console.log('observable1 emit')), finalize(() => console.log('observable1 complete'))).subscribe();
observable2$.pipe(tap(() => console.log('observable2 emit')), finalize(() => console.log('observable2 complete'))).subscribe();
onEither$.pipe(tap(() => console.log('onEither emit')), finalize(() => console.log('onEither complete'))).subscribe();
내가보고있는 것은 :
onEither emit
onEither complete
observable1 emit
observable2 emit
...(observable1 and 2 repeat)
내 이해는 모든 소스 관찰 가능 항목이 완료되었을 때만 병합이 완료된다는 것입니다. 그렇다면 왜 onEither가 완료됩니까?
병합에 배열을 전달하기 때문입니다. 매개 변수 목록이어야합니다. 로 변경:
const onEither$ = merge(
observable1$,
observable2$,
);
이것이 완료되는 이유는 내부적으로 rxjs가 from
배열을 관찰 가능한 배열 요소의 스트림으로 변환하는 메서드를 호출하기 때문 입니다. 따라서 기본적으로 onEither$
두 개의 방출을 수신하고 있으며 이는 배열에서 두 관찰 가능한 객체의 값을 가지고 있습니다. 그것들이 방출 된 후 관찰 가능 항목이 완료됩니다.
배열의 관찰 가능 항목은 값으로 사용되며 실제로 구독되지 않으므로 변경되지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다