IT이야기

순차적으로 관찰 가능성과 하나의 결과 도출

cyworld 2022. 4. 1. 22:05
반응형

순차적으로 관찰 가능성과 하나의 결과 도출

다음 기능을 사용하여 병렬로 실행하는 일련의 관찰 가능:

let observables: Observable<any>[]

Observable.forkJoin(observables) 

그러나 이것은 완벽하게 작동하지만, 나는 순차적으로 관찰 가능성의 배열을 실행해야 하며, 마지막 관찰 가능이 완료된 경우에만 하나의 결과를 내보내야 한다.그때 나는 사용하려고 했다.

Observable.concat(observables)

그러나 이것은 내가 포크조인을 사용할 때 얻을 수 있는 하나의 결합 결과뿐만 아니라 여러 개의 결과를 반환한다.그래서 나는 사실 둘의 조합이 필요해.

다음과 같이 순차적으로 실행하기 위해 축소 기능을 사용하려고 노력했다.

return observables.reduce((previous, current) => {
  return previous.flatMap(() => current);
}, Observable.empty());

그러나 이 해결책으로 관찰할 수 있는 것은 전혀 실행되지 않는다.

당신의 것을 가정하면.observables배열이 아닌 단수 값을 발산하여 다음과 같은 방식으로 현재 접근 방식을 변경할 수 있다.

return Observable.concat(...observables).reduce((acc, current) => [...acc, current], []);

또는 더 짧은 시간:

return Observable.concat(...observables).toArray();

배열 값을 내보내는 경우 다음을 수행할 수 있다.

const source = Observable.concat(...observables).flatMap(list => list).toArray();

조타로서.톨레도 또는 마테우스 위트코프스키가 그들의 대답에서 RxJS의 새로운 구문을 통해 다음과 같이 할 수 있다는 것을 보여주었다.

return concat(...observables).pipe(toArray());

사용할 수 있다toArray()연산자:

Observable.concat(observables).toArray().subscribe()

RxJS 문서에 명시된 바와 같이: "원소 시퀀스의 모든 요소를 포함하는 목록과 함께 단일 요소를 포함하는 관측 가능한 시퀀스"를 생성한다.

참조URL: https://stackoverflow.com/questions/48358769/sequentially-execute-observables-and-emit-one-result

반응형