RxJS에서 Observable 연결
RxJS와 Angular 2를 배우고 있습니다. 이전 결과에 의존하는 여러 비동기 함수 호출이있는 promise 체인이 있다고 가정 해 보겠습니다.
var promiseChain = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 2);
}, 1000);
});
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 3);
}, 1000);
});
});
promiseChain.then((finalResult) => {
console.log(finalResult);
});
약속을 사용하지 않고 RxJS만을 사용하여 동일한 작업을 수행하려는 시도는 다음과 같습니다.
var observableChain = Observable.create((observer) => {
setTimeout(() => {
observer.next(1);
observer.complete();
}, 1000);
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 2);
observer.complete()
}, 1000);
});
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 3);
observer.complete()
}, 1000);
});
});
observableChain.subscribe((finalResult) => {
console.log(finalResult);
});
약속 체인과 동일한 결과를 산출합니다. 내 질문은
내가이 일을 제대로하고 있는가? 위의 코드를 개선 할 수있는 RxJS 관련 개선 사항이 있습니까?
이 관찰 가능한 체인을 반복적으로 실행하려면 어떻게해야합니까? 즉, 끝에 다른 구독을 추가하면 1, 3 및 6을 인쇄 할 것으로 예상하지만 추가 6이 생성됩니다.
observableChain.subscribe ((finalResult) => {console.log (finalResult);});
observableChain.subscribe ((finalResult) => {console.log (finalResult);});
1 3 6 6
About promise composition vs. Rxjs, as this is a frequently asked question, you can refer to a number of previously asked questions on SO, among which :
- How to do the chain sequence in rxjs
- RxJS Promise Composition (passing data)
- RxJS sequence equvalent to promise.then()?
Basically, flatMap
is the equivalent of Promise.then
.
For your second question, do you want to replay values already emitted, or do you want to process new values as they arrive? In the first case, check the publishReplay
operator. In the second case, standard subscription is enough. However you might need to be aware of the cold. vs. hot dichotomy depending on your source (cf. Hot and Cold observables : are there 'hot' and 'cold' operators? for an illustrated explanation of the concept)
ReferenceURL : https://stackoverflow.com/questions/37771855/chaining-observables-in-rxjs
'programing' 카테고리의 다른 글
C ++에서 set과 unordered_set의 차이점은 무엇입니까? (0) | 2021.01.16 |
---|---|
C99에서 f () + g ()는 정의되지 않았습니까 아니면 단순히 지정되지 않았습니까? (0) | 2021.01.16 |
하위 컬렉션으로 Cloud Firestore 심층 가져 오기 (0) | 2021.01.16 |
JVM 시작 속도가 느린 이유는 무엇입니까? (0) | 2021.01.16 |
조각화없이 보낼 수있는 가장 큰 UDP 패킷을 찾는 방법은 무엇입니까? (0) | 2021.01.16 |