等待观察完成

dev*_*per 5 javascript observable rxjs typescript angular

我有一系列方法,这些方法取决于其他方法的完成。

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);

   ...

}
Run Code Online (Sandbox Code Playgroud)

如何在调用下一个方法(process2,process3)之前等待可观察对象完成?(类似于在C#中等待)

dee*_* zg 6

您可以尝试这样的事情...

main(data: string) : string {

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

显然,take(1)假定proces1(...)解析为单个值并停止。之后,它switchMaps到process2,这意味着它开始发出任何可观察到的从过程2给出。另一方面,如果您希望process2运行通过frmo process1发出的每个结果,则只需删除即可take(1)


Ste*_*eve 5

您可以使用 rxjs concat 运算符。请参阅此处的文档。 连接

基本上它会等到第一个或源可观察值返回,然后执行下一个。

更新

您还可以根据需要尝试 switch 或 switchmap 等运算符。