我希望按顺序调用三个函数someTask1
,someTask2
和someTask3
。然而,函数someTask2
包含Ajax调用,并且除非返回所需的值,否则使用setTimeout
递归地调用自身。 代码如下:
doListOfTasks: function(myparam){
var someObj = someTask1(myParam);
someTask2(someObj);
someTask3(someObj);
},
someTask2: function(someObj){
$.ajax({
url: "someUrl.do",
type: "POST",
data: ({"id": rowObject.instanceId}),
dataType: "json",
async:false,
success: function(res){
if(res.prop1 != 'desired'){
setTimeout(function(){someTask2(someObj);}, 2000);
}
}
}
);
},
正如您所猜测的那样,执行此代码时不会等待someTask2
返回后才调用someTask3
。
我希望在doListOfTasks
内部执行代码顺序。我该怎么做呢?
此外,我不想在success
回调函数中硬编码someTask3
。例如,我不想这样做:
success: function(res){
if(res.prop1 != 'desired'){
setTimeout(function(){someTask2(someObj);}, 2000);
}else{
someTask3(someObj);
}
}
如何实现这个功能?
谢谢。
编辑#1
问题不在于无法调用函数...而是同步的问题。我希望someTask2
完成它正在做的事情,然后才调用someTask3
。
someTask2
使用setTimeout重复调用自身...我猜这会触发一个新线程,并且someTask2
在第一次调用后就返回...在主线程中触发someTask3
。但是,在每次调用setTimeout时都会生成(并被销毁)单独的线程,直到满足所需条件。
这就是为什么当someTask2
仍在循环时,调用someTask3
的原因。
不确定我是否正确。