반응형
스위치맵 운영자가 약속과 함께 사용할 때 마지막 값만 내보내는 이유는?
나는 이것을 이해하는데 약간의 어려움이 있다.관측 가능한 스위치맵 연산자를 사용하면 예상대로 모든 값이 방출된다.
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를 참조하십시오.
반응형
'IT이야기' 카테고리의 다른 글
관찰 가능 변경사항이 보기에 반영되지 않음 (0) | 2022.03.11 |
---|---|
Vue.js는 라우터 뷰를 통해 전달된 데이터를 브라우저의 devtools에서 볼 수 있어야 하는가? (0) | 2022.03.11 |
Vue-Router가 단일 페이지 애플리케이션에서 재라우팅되지 않음(Vue/Laravel) (0) | 2022.03.10 |
반응성 항법 실험 예시? (0) | 2022.03.10 |
react-Router v4에서 react IndexRoute 사용 (0) | 2022.03.10 |