2014-09-23 95 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") 
    }); 
});