CNode

涉及到I/O操作就callback,其余的都可以return

问答
Ssinoon发布于12 年前最后回复12 年前10 回复4778 浏览0 收藏

了解Nodejs几个月,从一开始不理解非阻塞,到现在在写代码的时候已经适应。

前几天突然想到,涉及到I/O操作就callback,其余的都可以return,请问,各位前辈,这么讲对不对?

查看回复

回复 (10)

A
alsotang#1·12 年前

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

E
eeandrew#2·12 年前

那你怎么看这段代码呢?

var Q = require('q'),
	fs = require('fs');
var readFile = Q.denodeify(fs.readFile);
function getFileContent(filePath) {
	return readFile(filePath,'utf8'); //这里也用了return. 怎么理解呢?
}
getFileContent('test.txt').then(console.log).fail(console.log).done();
S
sinoon#3·12 年前
引用 eeandrew那你怎么看这段代码呢?

@eeandrew 用promise封装过有点不同吧,我是指原生下面的情况

D
DevinXian#4·12 年前

什么是return,return和callback没有关系,return只是告诉你返回了一个xxx(任意值,函数对象等)。

E
eeandrew#5·12 年前

@sinoon

  • 异步操作使用回调函数当然没有错
  • 不建议用这种方式去总结
  • 实际项目中尽量别用回调
  • 不要把异步和非阻塞当成一回事
S
sinoon#6·12 年前
引用 eeandrew@sinoon 异步操作使用回调函数当然没有错 不建议用这种方式去总结 实际项目中尽量别用回调 不要把异步和非阻塞当成一回事

@eeandrew 恩,多谢提醒,我也觉得这样总结是不对的,但是目前我做的东西都可以用这种方式去化解(存在I/O操作的函数,用callback,不存在I/O操作的可以用return)。 所以我不由自主的觉得可能是这样,但做的东西还太少,又不确定所以上来问一下前辈们。 感谢~!

L
leapon#7·12 年前

长的计算也得用callback

W
wewoor#8·12 年前

return和这个是两码事情,执行回调是因为事件执行了异步处理, 而你想通过return来返回callback的结果的话,是需要借助promise 或者 Q 这些库来同步封装才行。

H
hades#9·12 年前

这!!!!!

Y
yessirpopesama#10·12 年前
引用 eeandrew@sinoon 异步操作使用回调函数当然没有错 不建议用这种方式去总结 实际项目中尽量别用回调 不要把异步和非阻塞当成一回事

@eeandrew 赞同124点,吐槽3点:实际项目中碰到过大量回调,引起各种蛋疼时序问题,还得用Pro迷色去解决。。。

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