当前位置: 首页 > 面试题库 >

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

吕征
2023-03-14
问题内容

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

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

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

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

问题答案:

您似乎将异步IO与异步功能混淆了。由于非阻塞IO更好,所以node.js使用异步非阻塞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。

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



 类似资料:
  • 问题内容: 我是节点的新手,并尝试在节点中使用异步和事件行为优势。我以前从节点上了解到,用事件对象处理的所有内容都会异步执行。 然后我尝试了这个,请考虑以下代码: 这是异步执行吗?我认为不!为什么,因为我读了很多这句话: 一个事件被触发了,所以去做点什么,然后当你完成它之后,回来告诉我,但是与此同时,我会做点其他的事情。 就像快餐店的场景。但是上面的代码,当事件工作被触发时,将发生以下顺序: 进入

  • 在vert. x中编写异步请求处理程序的推荐方法是什么? 在此服务中,请求处理通常涉及调用DB、调用外部服务等。但是,我不想阻止请求处理线程。使用vet实现这一目标的推荐方法是什么。十、在一个典型的异步处理链中,我将使用请求处理线程向带有请求对象的消息总线发出消息。另一个处理程序将选择此消息并进行一些处理,例如检查请求参数。然后,这个处理程序可以向总线发出一条新消息,下一个处理程序将执行远程调用,

  • 问题内容: 我正在编写一个库,希望最终用户可以选择使用该库,就像其方法和功能不是协程一样。 例如,给定此功能: 最终用户不愿意在自己的代码中使用任何异步功能,仍然必须导入asyncio并运行以下命令: 如果可以的话,可以确定自己是否被称为协程,并做出相应的反应,这很酷。 所以像: 问题答案: 您需要两个函数-异步协程和同步常规函数: 实际上是,但我强烈建议您不要在同一函数中混合使用同步代码和异步代

  • 问题内容: 我不确定node.js如何在异步中实现哪些功能,在异步中没有实现的功能以及如何创建自定义异步功能。 说我想创建一个自定义的异步函数。如果只是因为我对异步函数回调或cb调用了我的最后一个参数而只知道其异步函数,我会感到惊讶: 我尝试了类似的方法,但它无法异步运行。您如何告诉node.js f实际上是异步的? 问题答案: 注意 :此答案写于2014年,在出现之前,在Promises流行之前

  • 问题内容: 我该如何做这项工作 我试图从异步之一获取同步功能,我需要它来使用FreeTds异步查询作为同步之一 问题答案: 使用deasync-用C ++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个函数,该函数阻止后续代码,但不阻止整个线程,也不引起繁忙的等待。您可以将函数放入循环中:

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做