IT이야기

스위치맵 운영자가 약속과 함께 사용할 때 마지막 값만 내보내는 이유는?

cyworld 2022. 3. 10. 22:32
반응형

스위치맵 운영자가 약속과 함께 사용할 때 마지막 값만 내보내는 이유는?

나는 이것을 이해하는데 약간의 어려움이 있다.관측 가능한 스위치맵 연산자를 사용하면 예상대로 모든 값이 방출된다.

Observable.from([1, 2, 3, 4, 5])
    .do(console.log)
    .switchMap(i => Observable.of('*' + i))
    .do(console.log)
    .subscribe();

결과:

1
*1
2
*2
3
*3
4
*4
5
*5

그러나 내가 약속에 의해 관찰 가능한 것을 대체하면 나는 다른 행동을 하게 된다.

Observable.from([1, 2, 3, 4, 5])
    .do(console.log)
    .switchMap(i => new Promise((resolve) => resolve('*' + i)))
    .do(console.log)
    .subscribe();

결과:

1
2
3
4
5
*5

이것은 예상대로 효과가 있다.네가 말한 대로의 예기치 못한 행동은 때문이다.Observable.from, 그리고Observable.of반면에 항상 엄격하게 동기식이다.new Promise반드시 그렇지는 않다(사양을 잘 모르기 때문에 모든 브라우저에서 Promise가 그렇게 해야 할지도 모른다.

어쨌든 강제할 수 있다.Observable.from을 통과하여 비동기적으로 발산하다.async스케줄러.

import { Observable } from 'rxjs';
import { async } from 'rxjs/scheduler/async';

Observable.from([1, 2, 3, 4, 5], async)
    .do(console.log)
    .switchMap(i => new Promise((resolve) => resolve('*' + i)))
    .do(console.log)
    .subscribe();

이제 모든 배출물은 새로운 프레임 안에 있다.Promise그리고 예상대로 출력된다.

라이브 데모(콘솔 열기): https://stackblitz.com/edit/rxjs5-gfeqsn?file=index.ts를 참조하십시오.

참조URL: https://stackoverflow.com/questions/48843447/why-does-switchmap-operator-only-emit-the-last-value-when-used-with-a-promise

반응형