CNode

fs.readFile同步异步没区别?

Ccoolicer发布于14 年前最后回复14 年前18 回复17157 浏览0 收藏

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)

V
venngomez#1·14 年前

来个大点的file ?

G
gxmari007#2·14 年前

异步是两种都可能出现...就看执行快慢了

A
a272121742#3·14 年前

所谓的异步并不阻塞,程序依然执行,异步的操作会在适合的时机完成,有可能在某个同步操作之前,或者之后

C
coolicer#4·14 年前
引用 gxmari007异步是两种都可能出现...就看执行快慢了

我看到头像以为穿越了,我也有用这个头像。

一般是用异步多还是同步多?

C
coolicer#5·14 年前
引用 a272121742所谓的异步并不阻塞,程序依然执行,异步的操作会在适合的时机完成,有可能在某个同步操作之前,或者之后

有个问题,这个readFile有可能返回2种类型的数据,一种是UTF8和buffer 。我查了一下这个file类型,查不到资料。我想问, 这个readFile可以读什么类型的文件?

C
coolicer#6·14 年前
引用 venngomez来个大点的file ?

原来是这样啊。

Z
zxc122333#7·14 年前

不清楚你有什么疑问。。。 异步的,就应该是这样 end. Contents of the file.

同步的,就应该是这样 Contents of the file. end.

有什么问题吗? 无论这个文件的大小,哪怕文件是零,顺序都是固定的

C
charje#9·14 年前

异步的时候,下面的语句会被执行,不等待读取完成在执行。如果不对请指出。

V
venngomez#10·14 年前
Z
zxc122333#11·14 年前
引用 charje异步的时候,下面的语句会被执行,不等待读取完成在执行。如果不对请指出。

@venngomez 明显是错的,思考:setTimeout(func,0),这个会在什么时候执行?

V
venngomez#12·14 年前
引用 zxc122333不清楚你有什么疑问。。。 异步的,就应该是这样 end. Contents of the file. 同步的,就应该是这样 Contents of the file. end. 有什么问题吗?...

@coolicer 昨天也可能没错,今天也可能错了。档案的大小、cpu的load等都有可能产生不同的顺序,这些都靠不住,我也遇到过,在开发机上就是有一定的顺序,上载到生产server上又是另一顺序,可能cpu强了些?

V
venngomez#13·14 年前
引用 a272121742所谓的异步并不阻塞,程序依然执行,异步的操作会在适合的时机完成,有可能在某个同步操作之前,或者之后

@coolicer readFile可读任何类型的文件,如加UTF8, 结果就是String, 如没就是buffer, 这时可来个toString如果是text的话,utf8的优点是你不要来这下,如果你清楚你的文件是text.

Z
zxc122333#14·14 年前
引用 zxc122333不清楚你有什么疑问。。。 异步的,就应该是这样 end. Contents of the file. 同步的,就应该是这样 Contents of the file. end. 有什么问题吗?...

@venngomez 建议你看一下底层的libuv,最好是用libuv写一个小练手,这样你就知道应该是什么顺序了

V
venngomez#15·14 年前
G
gxmari007#16·14 年前
引用 gxmari007异步是两种都可能出现...就看执行快慢了

@coolicer 一般来说后面那步依赖前面那步的话就得用同步,反之用异步更快些,把异步和同步想像成同时起步赛跑和接力赛应该更好理解吧。

参与回复
登录后即可参与回复。登录