我试图研究异步函数应该如何编写.在查阅了大量文件之后,我仍然不清楚.

How do I write asynchronous functions for Node? How should I implement error event handling correctly?

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

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

此外,我还发现了100("如何在node.js中创建非阻塞异步函数?")有趣的我觉得还没有人回答.

推荐答案

您似乎混淆了异步IO和异步函数. node .js使用异步非阻塞IO,因为非阻塞IO更好.理解它的最好方法是go 看瑞安·达尔的一些视频.

How do I write asynchronous functions for Node?

只需编写普通函数,唯一的区别是它们不会立即执行,而是作为回调传递.

How should I implement error event handling correctly

通常,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);
});

Edit:

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

上述函数调用为

async_function(42, function(val) {
  console.log(val)
});
console.log(43);

将以异步方式将42打印到控制台.尤其是在当前eventloop调用堆栈为空后触发process.nextTick.async_functionconsole.log(43)运行后,调用堆栈为空.所以我们先打印43,然后打印42.

您可能应该阅读一下事件循环.

Node.js相关问答推荐

MongoServelSelection错误:服务器 Select 在30000 ms后超时

无法在我的 node 项目中转让Google Drive v3 API中的所有权

聚合发布/订阅消息

try 插入重复的邮箱时,mongoDB DuplicateKey 错误未定义

从mongodb集合中获取每分钟数据的每小时数据

在 Nest 项目上运行 Jest 测试时,我的文件无法找到一个在测试之外没有任何问题的模块

如何获取文件的中间值?

我应该如何解决这个 Angular node 包模块依赖冲突?

是Electron 的密码和登录凭据的安全存储吗?

MERN 堆栈项目中的 React [create-react-app] 正在提供依赖项

无法通过谷歌Electron 表格 api( node js)中的服务帐户访问写入

仅显示用户在 Reactjs 中使用服务器端发布的帖子是 Node Js、Mongodb

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

如何在 TypeScript 中输出 Hackerrank 二叉树问题?

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

NodeJs 过滤掉目录异步

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

如何使用 Puppeteer 从输入中删除现有文本?

将变量传递给nodemailer中的html模板

如何判断MongoDB本机nodejs驱动程序中是否存在集合?