2017-10-07 71 views
1

我遇到了一個問題,我無法理解如何執行代碼的順序。假設我有:函數作爲對象參數

console.log("0"); 
foo(); 
console.log("1"); 

function foo(){ 
     console.log("2"); 
     jsonfile.readFile('test.json', function(err, obj){ 
      console.log("3"); 
     }); 
     console.log("4"); 
} 

當我期待「0 2 3 4 1」時,上述程序的輸出爲「0 2 4 1 3」。

爲什麼會發生這種情況?

+1

高興地看到,你進行一些合理的日誌和調試。似乎沒有多少人這樣做。然而,每天都會被問到。鑑於你自己發現了什麼,找到這個問題的多個答案不應該太難。 – llama

回答

0

jsonfile.readFile執行語句該文件已被讀取的回調函數。

console.log("4")聲明阿伯jsonfile.readFile執行程序有後立即開始讀取文件,而不是之後已經讀完了文件,你可能期望。

這叫做異步

JavaScript和Node.js中的很多功能都基於這個概念。

這裏有一個相關的問題是,對如何處理異步函數的詳細信息調用:

How do I return the response from an asynchronous call?

3

readFile是異步的。一旦文件被讀取,回調函數將被調用。

與此同時,foo的其餘部分將完成運行。