我仍在努力使用Observables,因为我正在使用复杂的逻辑和多个请求和响应来编写复杂的REST API查询函数。
我已经用这样的订阅写了很多函数,
function1(){
thisReturnsAnObservable()
.subscribe();
}
function2(){
thisReturnsAnObservable()
.subscribe();
}
function3(){
thisReturnsAnObservable()
.subscribe();
}
在具有多个查询的函数中,我像这样编码
complexFunction(){
function1();
function2();
function3();
if (aVariableChangedBy123 == true){
doSomething();
}
}
我觉得我很困惑,实验证明我错了,因为,变量aVariableChangedBy123总是在function1,2,3完成之前得到评估,所以我想要的是因为aVariableChangedBy123只能在function1,2之后确定, 3顺序逐个完成,我应该如何编写一个函数来连接这些函数并使它们顺序运行?
我知道可以有一些方法来重写所有的函数1,2,3,但有没有办法不需要编写这些函数,因为我可以在其他情况下重用它们?
我尝试使用flatMap()
函数,我知道它可以像then()
一样链接它们,但是代码总是在运行时给出错误,比如Cannot read property 'flatMap' of undefined
,因为所有的funtion1, 2,3是无效函数。
我有办法,但我不知道它是否正确。
喜欢
Observable.forkJoin(Observable.of(function1),Observable.of(function2)).subscribe() ;
这可行吗?从未想过我可以静态使用它......
答案 0 :(得分:0)
您应该使用 'submit #editTaskDetails'(event){
event.preventDefault();
var id = FlowRouter.getParam('taskId');
const singleDetailsUpdate = Tasks.findOne({_id:id});
const singleID = singleDetailsUpdate._id;
const target = event.target;
const facilityTarget = target.facilityName.value;
const inspectorTargetName = target.detailsinspector.value;
const inspectorIdTarget = target.inspectorid.value;
const detailsTarget = target.detailstype.value;
const dateTarget = target.TaskDate.value;
console.log(singleID)
Meteor.call("changeTaskDetails", singleID,detailsTarget);
},
或map
运算符,每个函数都应该返回一个订阅,以便它可以转到下一个函数。这样,您只能在最后一个方法中订阅,并且您的函数将按顺序运行。