有沒有辦法在另一個函數完成後運行一個函數?例如:jquery同步函數
doSomething();
doSomethingElse();
我只想在doSomething完成後運行doSomethingElse()。這可能嗎?
有沒有辦法在另一個函數完成後運行一個函數?例如:jquery同步函數
doSomething();
doSomethingElse();
我只想在doSomething完成後運行doSomethingElse()。這可能嗎?
如果您的doSomething()
函數正在異步執行某些操作(例如發出Ajax請求),那麼您需要爲該異步請求回調doSomethingElse()
,而不是在doSomething()
返回後立即執行。
我正在做一個ajax請求,所以這看起來像是將其放入回調函數的有效解決方案,但我只是試圖在回調之外執行它。 – ngreenwood6 2009-11-21 02:00:01
有沒有辦法來明確本身執行這一點,但一個想法是有DoSomething的()返回一個值,該值doSomethingElse()接受作爲參數:
retval = doSomething();
doSomethingElse(retval);
這樣至少可以防止有人從調用doSomethingElse(),至少提供它所需的參數......當然,他們是否從調用doSomething()獲得該參數是另一個問題。但這是一個開始。
想法從Code Complete中解除。
我不明白這是如何解決任何事情。如果doSomething()正在做一些異步操作,問題纔有意義。返回並傳遞值不會影響工作完成的時間。 – Nosredna 2009-11-21 01:30:26
其實你可以用jQuery做什麼(至少在某種意義上)。這可能被認爲有點hacky,但工作完美無瑕。
只需在您的頁面中添加一個元素,您不用於任何其他元素。例如一個空的div在某處。
<div id="syncFnHolder"></div>
然後包括JS與你的函數+我寫的runMe
函數。
function doSomething() { alert("First"); }
function doSomethingElse() { alert("Second"); }
function doSomethingElseThree() { alert("Third"); }
function runMe(fn, selec) {
return function() {
fn();
setTimeout(function() {
$(selec).dequeue("syncFnQueue");
}, 1000);
}
};
var selector = "#syncFnHolder";
//add three functions to a queue
$(selector).queue("syncFnQueue", runMe(doSomething, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElse, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector));
//start first function in queue (FIFO) others are triggered automatically
$(selector).dequeue("syncFnQueue");
這會在它們之間產生三個警報,它們之間的距離爲1秒,表示「First」,「Second」,「Third」。
如果您不想延遲,請刪除setTimeout並將呼叫留在$(selec).dequeue("syncFnQueue");
。
如果您的功能需要參數,例如doSomething(x,y,z)
您需要將runMe
函數修改爲更好的部分,並以不同的方式構造返回的函數。檢查這裏或發佈新的問題。
非常有趣 – gpilotino 2009-11-21 01:29:12
爲什麼不只是在JS對象中做排隊和出隊。似乎沒有意義將它彈出到虛擬DOM元素中。 – nickytonline 2009-11-21 01:41:54
?我該怎麼用jQuery來做到這一點?猜猜在這一天的這個時候(上午02點45分)我無法理解你的意思。 – jitter 2009-11-21 01:49:17
您可能要做到這一點....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
不貼你已經做你想要什麼呢?我在這裏錯過了什麼? – 2009-11-21 00:40:25
+1來衡量-1。這個問題和其他問題一樣有效。 – echo 2009-11-21 00:44:22
任何機會,你可以給我們更多的代碼或告訴我們你想要做什麼? – Nosredna 2009-11-21 01:36:34