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