2012-09-03 32 views
0

我想記錄'挖掘'並儘快執行HUD,但是oauth_upload_photo導致它滯後(顯然是因爲吊裝)。我怎樣才能立即捕捉HUD?避免吊裝引起的滯後

var submit_post = function submit_post(){ 

    console.log('tapped'); 

    // Show HUD 
    plugins.navigationBar.hideRightButton(); 
    var hud = document.getElementById("hud"); 
    hud.style.display = 'block';  

    // Get the image 
    var image = document.getElementById('myImage'); 
    var imageURI = image.src; 

    // Get the caption from the textarea 
    var cap = document.getElementById('tar'); 
    var caption = cap.value; 

    // Call upload photo 
    oauth_upload_photo(imageURI,caption); 

}; 
+1

這與吊裝有什麼關係?究竟是「滯後」? –

+1

這是懸掛函數的聲明,而不是它的調用。閱讀更多有關起重。滯後將很可能歸結於您正在進行的其他GUI工作(您的示例中沒有顯示任何)。 – Matt

+0

當我註釋掉oauth_upload_photo時,會立即記錄「點擊」。當我不這樣做時,在「tapped」記錄之前會有1-2秒的延遲。 oauth_upload_photo是比較複雜的(二進制圖像轉換) – ggwarpig

回答

1

您的問題(這需要更多的解釋之前,我們可以理解你實際上問)無關,與JavaScript變量吊裝。所有提升都會導致變量被定義在函數的頂部,而不管它們的初始聲明在函數中的位置。它不會更改任何語句的執行順序。

此外,在某些瀏覽器中,console.log()不保證是完全同步的,並且日誌窗口中的數據顯示不一定是立即執行。實際記錄之前有時會有延遲。我不知道這是由跨進程邊界編組數據,一般重繪邏輯還是其他內部實現問題引起的。

你也可能要改變這一點:

var submit_post = function submit_post(){ 

這樣:

var submit_post = function(){ 

,甚至這樣的:

function submit_post() { 

這樣你就不會翻倍定義相同的符號。

+0

FWIW,「雙重定義」只會在IE <9中出現問題;在其他情況下,它會在嘗試調試錯誤時獲得調用堆棧中沒有「匿名函數」的優勢:P。 – Matt

+0

@Matt - 爲什麼不在這裏使用正常的函數定義而不是變量賦值? – jfriend00

+0

'@'jfriend00:這將是我想的最佳解決方案:)。我的意思是澄清這句話,而不是建議替代:)。 – Matt

相關問題