fs.readFile同步异步没区别?
发布于 12 年前 作者 coolicer 16367 次浏览 最后一次编辑是 8 年前

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. -----------------------------分隔线--------------------------------- 是版本更新了才变成这样,还是?求解?

18 回复

来个大点的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 一般来说后面那步依赖前面那步的话就得用同步,反之用异步更快些,把异步和同步想像成同时起步赛跑和接力赛应该更好理解吧。

@coolicer

fs.readFile(filename, function (err, content) {
  // content是Buffer类型
});

fs.readFile(filename, 'utf8', function (err, content) {
  // content是String类型
});
回到顶部