陸續

2011-05-12 56 views
3

執行功能我有這樣的javascript代碼:陸續

if (direction !== "leftnav") { 
// DO THINGS 
}; 
setTimeout(function() { 
//DO OTHER THINGS AFTER THE FIRST THING 
}, 1000); 

是否有可能在第一,而不必使用超時事件後執行2E功能?

非常感謝您的幫助:)

+0

我不明白這個問題;爲什麼不能在「if」塊中包含「//在第一件事後做其他事情」? – 2011-05-12 13:43:06

+0

需要更多示例代碼來回答此問題。你在第一個「//做什麼」中做了一個AJAX調用?如果是這樣,你只需使用['callback'](http://api.jquery.com/jQuery.ajax/)。 – pixelbobby 2011-05-12 13:43:25

+0

if(direction!==「leftnav」){ //做什麼 //在做第一件事後做其他事情 } – 2011-05-12 13:43:50

回答

8

是的,這是可能的。以下是使用您提供的唯一代碼的示例:

if (direction !== "leftnav") { 
    // DO THINGS... 

    // THEN 
    doOtherThings(); 

    // THEN 
    doMoreThings(); 
}; 

var doOtherThings = function(){ 
    //DOING OTHER THINGS 
} 
var doMoreThings = function(){ 
    //DO EVEN MORE THINGS 
} 
+4

沒有upvotes?唉,你們今天是螃蟹吧:] – pixelbobby 2011-05-12 17:14:14

7

JavaScript的,如果你在有if語句阻止運行從上到下。如果是這樣,你可以把代碼放在if語句的正下方,在超時之外,它將正常運行。如果它是異步的,那麼可以使用一個回調函數,當第一個函數完成時啓動第二個函數。

下面提供的例子並不是真正有效的做事方式,但更多地用於說明我在上面討論的內容。在write()函數中,你可能正在做一個AJAX調用,或者等待用戶點擊某個東西,或者你有什麼。解釋者繼續到下一行,該部分將立即寫入,並按照順序排列。

JS

var write = function (v, cb) { 
    setTimeout(function() { 
     document.write(v); 
     cb && cb(); 
    }, 1000); 
} 

if (true) { 
    write("I'm not blocking, blah<br/>", function() { 
     document.write("Running<br/>"); 
    }); 
} 

if (true) { 
    document.write("I'm blocking, blah<br/>"); 
} 
document.write("Running<br/>"); 

輸出

I'm blocking, blah 
Running 
I'm not blocking, blah 
Running 

http://jsfiddle.net/robert/vvmyk/

+1

+1好帖子。 – pixelbobby 2011-05-12 17:15:03

0

你只需要調用函數的順序你想

function foo(){ 
//code 
} 

function bar(){ 
//other 
} 

bar(); 
foo(); 

像這樣,bar將在foo之前調用。