Node.js开发指南上
var fs = require('fs');
fs.readFile('file.txt', 'utf-8', functino(data){
if (err) {
console.error(err);
} else {
console.log(data);
}
});
console.log('end.');
运行的结果如下: end. Contents of the file. 而如果是同步的话fs.readFileSync,就会是 Contents of the file. end. -----------------------------分隔线--------------------------------- 我得到的结果却是: Contents of the file. end. -----------------------------分隔线--------------------------------- 是版本更新了才变成这样,还是?求解?
来个大点的file ?
异步是两种都可能出现…就看执行快慢了
所谓的异步并不阻塞,程序依然执行,异步的操作会在适合的时机完成,有可能在某个同步操作之前,或者之后
我看到头像以为穿越了,我也有用这个头像。
一般是用异步多还是同步多?
有个问题,这个readFile有可能返回2种类型的数据,一种是UTF8和buffer 。我查了一下这个file类型,查不到资料。我想问, 这个readFile可以读什么类型的文件?
原来是这样啊。
不清楚你有什么疑问。。。 异步的,就应该是这样 end. Contents of the file.
同步的,就应该是这样 Contents of the file. end.
有什么问题吗? 无论这个文件的大小,哪怕文件是零,顺序都是固定的
我又试了一次。好像不会了,可能是我昨天弄错了。谢谢
异步的时候,下面的语句会被执行,不等待读取完成在执行。如果不对请指出。
既然是异步,也就是没顺序,什么都有可能。
@venngomez 明显是错的,思考:setTimeout(func,0),这个会在什么时候执行?
@coolicer 昨天也可能没错,今天也可能错了。档案的大小、cpu的load等都有可能产生不同的顺序,这些都靠不住,我也遇到过,在开发机上就是有一定的顺序,上载到生产server上又是另一顺序,可能cpu强了些?
@coolicer readFile可读任何类型的文件,如加UTF8, 结果就是String, 如没就是buffer, 这时可来个toString如果是text的话,utf8的优点是你不要来这下,如果你清楚你的文件是text.
@venngomez 建议你看一下底层的libuv,最好是用libuv写一个小练手,这样你就知道应该是什么顺序了
@zxc122333 是的,我那个说法不对,谢谢指正。
@coolicer 一般来说后面那步依赖前面那步的话就得用同步,反之用异步更快些,把异步和同步想像成同时起步赛跑和接力赛应该更好理解吧。
fs.readFile(filename, function (err, content) {
// content是Buffer类型
});
fs.readFile(filename, 'utf8', function (err, content) {
// content是String类型
});