Programing

관찰이 완료될 때까지 기다리십시오.

c10106 2022. 3. 24. 20:47
반응형

관찰이 완료될 때까지 기다리십시오.

나는 다른 방법의 완성에 의존하는 일련의 방법들을 가지고 있다.

process1(data: string) : Observable<string> {
   this.dataservice.process(data).subscribe(
            (response) => {
                return response.data;
            }
        );
}

main(data: string) : string {

   var process1Data: string = process1(data); 

   // I would like to wait for process1 method to complete before running process2
   // I do not want to include process2 inside subscribe of process1 because I have to make few more method calls
   var process2Data: string = process2(process1Data);

   var process3Data: string = process3(process2Data);

   ...

}

다음 방법(프로세스2, 프로세스3)을 호출하기 전에 관찰 가능한 작업이 완료될 때까지 어떻게 기다릴 수 있는가?(c#에서 기다리는 것처럼)

이런 걸 시도해 보면...

main(data: string) : string {

    process1Data$: Observable<string> = process1(data)
        .take(1)
        .switchMap((process1Data) => return process2(process1Data);
    .
    .
    .
}

분명히,take(1)라고 가정하다process1(...)단일 값으로 결정하고 중지한다.그 후switchMap로.process2즉, 관찰할 수 있는 모든 것을 방출하기 시작한다는 뜻이지process2다른 한편으로는 네가 원하면process2에서 배출되는 각 결과를 실행하다process1그럼 그냥 제거해.take(1).

rxjs concat 연산자를 사용할 수 있다.자세한 내용은 설명서를 참조하십시오. 연결

기본적으로 그것은 첫 번째 또는 관측 가능한 출처까지 기다렸다가 다음에 실행한다.

갱신하다

당신은 또한 당신의 요구 사항에 따라 스위치나 스위치맵과 같은 연산자를 시도할 수 있다.

es6 비동기/와이트 사용 가능

async main(data: string): string {
    var process1Data: string = await process1(data).toPromise();
    var process2Data: string = process2(process1Data);
    ...
}

process1원문에서는 답장이 되지 않기 때문에 혼란스럽다.Observable<string>(아마 다른 것을 사용하고 있을 겁니다.Observable'rxjs/Observable').

이것이 내가 언급하고 있는 코드다(원래 질문에서).

process1(data: string) : Observable<string> {
   this.dataservice.process(data).subscribe(
            (response) => {
                return response.data;
            }
        );
}

나로서는 이렇게 바꿨다.

process1(data: string) : Observable<string> {
   return this.dataservice.process(data).map(  //subscribe-->map
            (response) => {
                return response.data;
            }
        );
}

그리고 나서 무슨 일이 일어나려면process1완료, 그냥 사용subscribe네가 다른 사람과 함께 하듯이Observable:

main(data: string) : string {
   process1(data).subscribe((process1RetVal)=>
   {
         process2(process1RetVal);
   });
}

참조URL: https://stackoverflow.com/questions/45354940/wait-for-observable-to-complete

반응형