请教各位大神node.js代码的执行顺序是从上往下吗?当遇到callback的时候就异步执行代码,但是没有遇到callback的时候呢,是从上往下执行的? 我的测试代码如下:
console.log('test1');
console.log('test2');
var fs = require('fs');
fs.readFile(this.CONFIG.LOG_PATH + '/test.txt', 'utf8', function(error, result){
console.log('读取文件完成');
});
console.log('test3');
执行结果如下: test1 test2 test3 读取文件完成
14 回复
并不是所有的callback都是异步,这个是看具体代码实现的。但是node的约定是callback需要是异步的,保证风格的统一。
function getByUid(uid, callback) {
if (!uid) {
//同步返回的callback
return callback(new Error('need uid'));
}
//这里callback可能是异步的
db.note.getByUid(uid, callback);
}
这种风格的代码可能导致误解。好的实现在下面,保证callback是异步返回的。
if (!uid) {
return process.nextTick(function () {
callback(new Error('need uid'));
});
}
关于异步的原理,是基于事件循环的,底层的实现稍微复杂,但是在node层面来说,大部分的异步来源于:
- process.nextTick
- setTImeout, setInterval
- 底层库(fs/net等)