为什么控制流程不遵循代码执行顺序?
问题描述:
的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
。为什么会发生这种情况,如何避免这种情况?
答
您作为这两个函数的第二个参数传递的函数是回调。操作完成时执行它们 - 并且不保证执行顺序。
为了保证在读取完成之后发生写操作,将代码放入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")
});
});
我知道node.js确实有自动完成的功能,但是请使用';',这样可以防止出现这么多的错误(在其他情况下,这个错误)。 – DrakaSAN 2014-09-23 10:49:56