我要打電話三種功能someTask1
,someTask2
並依次someTask3
。然而,功能someTask2
涉及Ajax調用,並保持自稱遞歸使用setTimeout
除非所需價值回報。代碼如下所示:連續函數調用,而其中一人使用的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
代碼順序執行。我怎樣才能做到這一點?
而且,我不想硬編碼someTask3
在success
回調。例如。我不想這樣做:
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觸發。
不知道我有多正確。
你基本上是正確的,雖然JavaScript的只有一個執行線程。只有一個任務可以同時運行,雖然在內部瀏覽器*可以*使用不同的線程簿記如定時器 – 2011-04-20 13:25:13