Javascript 如何等待订阅链完成?

Javascript 如何等待订阅链完成?,javascript,angular,asynchronous,rxjs,observable,Javascript,Angular,Asynchronous,Rxjs,Observable,我仍然在和可观察性作斗争,因为我正在编写一个复杂的RESTAPI查询函数,其中包含复杂的逻辑和多个请求和响应 我已经写了很多这样的函数 function1(){ thisReturnsAnObservable() .subscribe(); } function2(){ thisReturnsAnObservable() .subscribe(); } function3(){ thisReturnsAnObservable() .subscribe

我仍然在和可观察性作斗争,因为我正在编写一个复杂的RESTAPI查询函数,其中包含复杂的逻辑和多个请求和响应

我已经写了很多这样的函数

function1(){
   thisReturnsAnObservable()
    .subscribe();
}

function2(){
   thisReturnsAnObservable()
    .subscribe();
}

function3(){
   thisReturnsAnObservable()
    .subscribe();
}
在有多个查询的函数中,我这样编码

complexFunction(){
  function1();
  function2();
  function3();
  if (aVariableChangedBy123 == true){
    doSomething();
  }
}
我想我很困惑,实验证明我错了,因为变量aVariableChangedBy123总是在函数1,2,3完成之前得到评估,所以我想要的是,既然aVariableChangedBy123只有在函数1,2,3依次完成之后才能确定,我应该如何编写一个函数来将这些函数与下标链接起来,让它们按顺序运行

我知道可以有重写所有函数1、2、3的方法,但是有没有一种方法不需要编写这些函数,因为我可以在其他情况下重用它们

我曾尝试使用
flatMap()
函数,我知道该函数可以像
then()
那样链接它们,但代码在运行时总是给出错误,比如
无法读取未定义的
的属性“flatMap”,因为所有函数1、2、3都是无效函数

我有办法,但我不知道这是否正确


这是否可行?从未想过我可以静态使用它…

您应该使用
map
switchMap
运算符,并且每个函数都应该返回一个订阅,以便它可以转到下一个函数。这样,您将只在上一个方法中订阅,并且您的函数将按顺序运行。

您应该使用
map
switchMap
运算符,并且每个函数都应该返回一个订阅,以便它可以转到下一个函数。通过这种方式,您将只订阅上一个方法,并且您的函数将按顺序运行。

检查
flatMap
(现在使用rxjs5检查
mergeMap
)和
forkJoin
它们似乎对我不起作用,有时它们只是让我无效[]不可分配给类型为SubscribableOrPromise errorCheck的参数,用于
flatMap
(现在使用rxjs5进行
mergeMap
)和
forkJoin
它们似乎对我不起作用,有时它们只会使我无效[]不可分配给SubscribableOrPromise Error类型的参数是否有一种方法我不需要更改这些无效函数。是否有一种方法我不需要更改这些无效函数。
Observable.forkJoin(Observable.of(function1),Observable.of(function2)).subscribe() ;