2014-09-23 79 views
2

我在爲什麼控制流程不遵循代碼執行順序?

的NodeJS
"use strict"; 

const 
    fs = require('fs'); 

fs.readFile('target.txt',function(err, data){ 
if (err) { throw err; 
} 
    console.log(data.toString()) 

}) 

fs.writeFile('target.txt','writing some content',function(err){ 
    if(err) 
    throw err; 
console.log("file saved") 
}) 

按代碼嘗試下面的例子中,我讀的文件,打印其內容。然後我在同一個文件中寫入一些內容並打印保存在控制檯中的文本文件。但我的輸出是

file saved 
writing some content 

writeFile功能最先執行,而不是readFile。爲什麼會發生這種情況,如何避免這種情況?

+0

我知道node.js確實有自動完成的功能,但是請使用';',這樣可以防止出現這麼多的錯誤(在其他情況下,這個錯誤)。 – DrakaSAN 2014-09-23 10:49:56

回答

5

您作爲這兩個函數的第二個參數傳遞的函數是回調。操作完成時執行它們 - 並且不保證執行順序。

爲了保證在讀取完成之後發生寫操作,將代碼放入readFile方法的回調觸發寫入。

"use strict"; 

const fs = require('fs'); 

fs.readFile('target.txt', function(err, data) { 
    if (err) throw err; 
    console.log(data.toString()); 

    fs.writeFile('target.txt', 'writing some content', function(err) { 
     if(err) throw err; 
     console.log("file saved") 
    }); 
});