IT이야기

두 관측치의 첫 번째 값이 모두 방출된 후 Zip이 값을 방출하지 않음

cyworld 2022. 3. 16. 22:07
반응형

두 관측치의 첫 번째 값이 모두 방출된 후 Zip이 값을 방출하지 않음

나는 두 개의 관측용품을 조합하려고 하는데 하나는 경로용 매개물이고 다른 하나는 맞춤 매개물이다.

사용하고 있다.zip때문에forkJoin효과가 없는 것 같아그런데 지퍼가 이상하게 굴고 있어, 왜냐하면 내가 내 관습 지퍼를 내보냈을 때 나는 그 값을 받지 못하거든.첫 번째 null 값만 받는다.BehaviorSubject기본 방출 값.

나는 이것을 읽었다.

"지퍼 오퍼레이터는 모든 내부 관측용품을 구독할 것이며, 각각이 값을 방출하기를 기다릴 것이다.이 경우 해당 지수의 모든 값이 방출된다.이것은 적어도 하나의 내부 관찰이 완료될 때까지 계속될 것이다."

두 관측치가 모두 값을 발산할 때까지 반응이 없다는 말인가?왜냐하면 관측할 수 있는 경로의 매개체는 한 번밖에 배출되지 않지만,dataEmitter가치를 계속 발산할 것이다.이 경우에 올바른 조작자는 무엇인가?

여기 내 암호 몇 개가 있다.

내 서비스의 이미터:

private dataEmitter: BehaviorSubject<any> = new BehaviorSubject<any>(null);

구성 요소 구독, 오직 가져오기null처음부터dataEmitter, 절대로this.calculatedData:

Observable.zip(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));

모든 계산이 완료되면 다음과 같이 호출된다.

this.dataEmitter.next(this.calculatedData);

로의 @cartant 전환에 의해 지적된 바와 같이combineLatest예상대로 작동함:

Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));

네 지퍼는 잘 작동한다. null가치다.당신은 사용할 수 있다.dataEmitter.filter(val => !isNullOrUndefined(val))null 및 정의되지 않은 값을 필터링하십시오.

참조URL: https://stackoverflow.com/questions/45074160/zip-isnt-emitting-values-after-the-first-values-from-both-observables-have-been

반응형