2014-07-01 55 views
0

我在我的index.html中只有兩行代碼(見下面)。我想在執行第二行之前執行第一行。我該怎麼做/確保?目前,「undefined」將在dataDB的控制檯中更新,因爲函數getDataFunction()需要一些時間。代碼執行一步一步地(同步)

var dataDB = getDataFunction(afterDate, toDate, afterTime, toTime); 
console.log("Content of dataDB: " + dataDB); 

對你來說可能是一個簡單的問題:-)我感謝你的幫助!

UPDATE:getDataFunction() 此功能只得到與D3(數據驅動的文件)的服務器的一些數據(採集+ JSON)......這些參數是用來識別感興趣的數據(時間幀) 。

function getDataFunction(afterDate, toDate, afterTime, toTime){ 

    d3.json("http://server...", function(error, data){ 
     if(error) { 
      console.log(error); 
     } else { 
      console.log(data); 

      dataDB = data.collection.items; 
      console.log(dataDB); 
     } 
    }); 
} 
+0

可能與您的getDataFunction的內容有關。你需要提供更多關於你在那裏做什麼的信息。可能是異步調用的ajax調用。它會解釋行爲。 –

+0

正如你在上面看到的,我已經用關於getDataFunction()的附加信息更新了原點問題。 – Kevin

回答

0

D3 api reference

它說,在API參考後確實做異步地,這樣的代碼進行的其餘部分的執行(在這種情況下的console.log)有沒有像樣的辦法,使javascript等待。最好的做法是重新設計它,您的回調函數可以滿足接下來的任何需求。

+0

好吧,我明白了。如果我在函數的else語句中執行'console.log(「dataDB的內容:」+ dataDB);'它在工作。我應該如何重新設計回調函數?你有好主意嗎?謝謝! – Kevin

+0

問題在於d3.json調用是異步執行的。所以調用會執行,當awnser重新運行時,您創建的回調函數(if/else)被執行。由於異步性質,它將開始在後臺執行此操作,並在json調用仍在執行時執行其餘代碼(因此未定義日誌消息)。 所以你想做下一個whatevery,它必須在回調函數中啓動,因爲沒有體面的方式讓javascript等待它。你可以做的就是在你的回調函數中調用一個函數,以便在需要等待時啓動下一個函數。 –