관찰이 완료될 때까지 기다리십시오.
나는 다른 방법의 완성에 의존하는 일련의 방법들을 가지고 있다.
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
'Programing' 카테고리의 다른 글
동적 하위 경로를 사용하여 vue 라우터를 정의하는 방법 (0) | 2022.03.24 |
---|---|
반응의 onClick 이벤트에 대한 TypeScript 인터페이스 서명JS (0) | 2022.03.24 |
복합 SaaS에 대한 반응 + 환원 (0) | 2022.03.24 |
ScrollView에 대해 영구적으로 표시되는 스크롤 막대(Native React Native) (0) | 2022.03.24 |
왜 람다에서는 인쇄가 안 되는가? (0) | 2022.03.24 |