如何使可观察对象等待上一个可观察对象完成

时间:2019-06-24 12:36:01

标签: angular rxjs6

我有一系列需要同步调用API的可观察对象。 API无法进行异步操作。因此,一个可观察的对象需要在执行之前观察到一个先前的可观察对象,我已经编写了如下所示的递归解决方案,有没有更好的方法呢?

 private myMethod(params) {
    let paramsCopy = params.slice();
    let param = paramsCopy.shift();
    if (param) {
     let resource: ResourceModel= param.resource;
     return resource.doPost(JSON.stringify(param.data))
                    .pipe(mergeMap(res => {return myMethod(paramsCopy)})
                    ,catchError((err) => handleError()));
    } else { 
       return //completed actions;
    }
 } 

2 个答案:

答案 0 :(得分:2)

您可以使用concat(observables:... *):可观察的。这样,可观察对象将等待另一个对象完成。请参考链接-https://www.learnrxjs.io/operators/combination/concat.html

答案 1 :(得分:1)

myService.get1().pipe(
  switchMap(responseOfGet1 => myService.get2())
).subscribe(responseOfGet2 => { ... });

Documentation