涉及到I/O操作就callback,其余的都可以return
发布于 3个月前 作者 sinoon 490 次浏览 来自 问答

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

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

10 回复

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

那你怎么看这段代码呢?

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();

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

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

@sinoon

  • 异步操作使用回调函数当然没有错
  • 不建议用这种方式去总结
  • 实际项目中尽量别用回调
  • 不要把异步和非阻塞当成一回事

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

长的计算也得用callback

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

这!!!!!

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

回到顶部