如何为Node.js编写异步函数

克里米亚:

我试图研究应如何精确地编写异步函数。经过大量的文档研究后,我仍然不清楚。

如何为Node编写异步函数?如何正确实施错误事件处理?

问我问题的另一种方式是:我应该如何解释以下功能?

var async_function = function(val, callback){
    process.nextTick(function(){
        callback(val);
    });
};

另外,我在SO上发现了这个问题(“如何在node.js中创建非阻塞异步函数?”)。我感觉还没有得到答复。

雷诺斯:

您似乎将异步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在当前eventloop调用栈为空之后触发。这调用堆栈是空后async_functionconsole.log(43)已经运行。因此,我们先打印43,再打印42。

您可能应该对事件循环进行一些阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章