programing

Rxjs : Observable.combineLatest 대 Observable.forkJoin

kingscode 2021. 1. 14. 22:55
반응형

Rxjs : Observable.combineLatest 대 Observable.forkJoin


Observable.combineLatest과의 차이점이 무엇인지 궁금 Observable.forkJoin하십니까? 내가 볼 수있는 한, 유일한 차이점은 forkJoinObservable이 완료 될 것으로 예상 combineLatest하고 최신 값 반환한다는 것입니다.


forkJoin모든 입력 관찰 가능 항목을 완료해야 할 뿐만 아니라 입력 관찰 가능 항목에 의해 생성 된 마지막 값의 배열 인 단일 값을 생성하는 관찰 가능 항목도 반환합니다. 즉, 관찰 가능한 마지막 입력이 완료 될 때까지 기다린 다음 단일 값을 생성하고 완료됩니다.

반대로, combineLatest모든 입력 관찰 가능 항목이 적어도 하나의 값을 생성하면 입력 관찰 가능 항목이 수행 할 때마다 새 값을 생성하는 Observable을 반환합니다. 이것은 무한한 값을 가질 수 있고 완전하지 않을 수 있음을 의미합니다. 또한 입력 관찰 가능 항목이 값을 생성하기 전에 완료 할 필요가 없음을 의미합니다.


또한:

combineLatest (...)는 Observable을 순서대로 하나씩 실행합니다.

combineLatest내부적으로를 사용합니다 concat. 이는 다음으로 이동하기 전에 배열의 각 관찰 가능 항목에 대해 값을 얻어야 함을 의미합니다.

// partial source of static combineLatest (uses the rxjs/operators combineLatest internally):
// If you're using typescript then the output array will be strongly typed based on type inference
return function (source) { return source.lift.call(from_1.from([source].concat(observables)), 
                           new combineLatest_1.CombineLatestOperator(project)); };

forkJoin (...)은 observable을 동시에 실행합니다.

소스 Observable이 3 개 있고 각각 실행하는 데 5 초가 걸리면 실행하는 데 15 초가 걸립니다 combineLatest. 반면 forkJoin들이 병렬로 실행는 5 초 정도 걸릴 수 있도록.

따라서 주문이 시행되지 않는 곳 forkJoin과 다소 비슷 Promise.all(...)합니다.

오류 처리 고려 사항 :

Observable 오류가 발생 combineLatest하면 후속 항목이 실행되지 않지만 forkJoin모두 실행 중입니다. 따라서 combineLatestObservable의 '시퀀스'를 실행하고 결과를 모두 함께 수집하는 데 유용 할 수 있습니다.


고급 참고 : 소스 Observable이 이미 '실행 중'(다른 항목에 의해 구독 됨)이고 사용중인 share경우이 동작이 표시되지 않습니다.

고급 참고 사항 : CombineLatest는 항상 각 소스의 최신 정보를 제공하므로 소스 관찰 가능 항목 중 하나가 여러 값을 방출하면 최신 정보를 얻을 수 있습니다. 각 소스에 대해 단일 값을 얻고 다음 소스로 이동하는 것이 아닙니다. 각 소스 관찰 가능 항목에 대해 '다음 사용 가능한 항목'만 가져 오도록해야하는 경우 .pipe(take(1))입력 배열에 추가 할 때 소스 관찰 가능 항목에 추가 할 수 있습니다 .


forkJoin- 모든 Observable이 완료되면 각각에서 마지막으로 방출 된 값을 내 보냅니다 .

CombineLatest -Observable이 값을 방출 할 때, 각각의 최신 값을 방출합니다.

사용법은 매우 비슷하지만 forkJoin 과 달리 combineLatest 에서 구독 취소하는 것을 잊지 마십시오 .

참조 URL : https://stackoverflow.com/questions/41797439/rxjs-observable-combinelatest-vs-observable-forkjoin

반응형