你似乎把异步IO和异步函数混淆了。Node.js使用异步非阻塞IO是因为非阻塞IO更好。理解它的最好方法是观看Ryan Dahl的一些视频。
如何编写Node的异步函数?
只需编写普通的函数,唯一的区别是它们不会立即执行,而是以回调函数的形式传递。
如何正确地实现错误事件处理?
通常,API会将一个err作为第一个参数给你的回调函数。例如:
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
这是一种常见的模式。
另一种常见的模式是on('error')
。例如:
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
编辑:
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
当调用上述函数时:
async_function(42, function(val) {
console.log(val)
});
console.log(43);
将异步地在控制台打印42
。特别是,process.nextTick
会在当前事件循环调用栈为空时触发。当async_function
和console.log(43)
运行完毕后,该调用栈为空。因此,我们会先输出43,再输出42。
你可能应该阅读一些有关事件循环的内容。