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

对Node.js的async.parallel()的调用是否同步?

晏经武
2023-03-14
问题内容

我正在研究Node.jsasync模块来解决问题。我已经进行了一些测试:

var async = require("async");

function print(val) {
    console.log(val);
}

async.parallel([
    function(cb){ print(1); cb(null); },
    function(cb){ print(2); cb(null); },
    function(cb){ print(3); cb(null); },
    function(cb){ print(4); cb(null); },
    function(cb){ print(5); cb(null); }
],
    function(err) {
        if ( err ) {
            console.error(err);
            return;
        }
        console.log("Done!");
    }
);

console.log("Trulu");

我可以确定在完成对Trulu的日志调用之前永远不会调用async.parallel它吗?换句话说,是否可以肯定在Trulu日志被调用之前调用所有函数和最终回调?


问题答案:

我可以确定在对async.parallel的调用完成之前永远不会调用Trulu日志调用吗?

电话本身,是的。

换句话说,是所有功能

我想是的,尽管文档没有提及。但是,我希望不会有任何更改,因为那样可能会破坏现有代码。

确定在Trulu日志之前调用的最终回调是吗?

否。您不知道这些函数,并且当它们异步时,最终的回调将在之后执行Trulu。如果所有功能都是同步的,则async无论如何都不要使用。实际上,尽管async.js确实在setImmediate
内部使用,所以某些回调(不幸的是难以识别)将被“异步化”,但维护者表示:

是的,使函数异步取决于开发人员

如果要确保始终以异步方式(在之后Trulu)调用回调,即使函数是同步的,也可以考虑使用兼容A
+的Promises



 类似资料:
  • 问题内容: 我需要从两个Web服务器请求数据。任务是独立的;因此,我正在使用aync.parallel。现在,我只在网页正文中写入“ abc”,“ xyz”和“完成”。 由于任务是同时执行的,我能否遇到奇怪的输出?例如, 代码。 问题答案: 如果要绝对确定结果的打印顺序,则应通过回调(第一个参数是错误)传递数据(和),并在最终的回调参数中处理/写入它们。

  • 问题内容: 是否有一些cron之类的库,可以让我安排某些功能在特定时间运行(例如15:30,而不是从现在开始x个小时等等)?如果没有这种库,应该如何实现呢?我是否应该将回调设置为每秒调用一次,检查时间并开始为该时间安排的作业? 问题答案: node-cron就是我所描述的

  • 问题内容: 我有两个从jquery到Web服务的ajax调用。 第一次调用()在javascript ()中开始一个间隔,并返回存储在会话变量中的消息的字符串数组。 第二个调用()上传用户并将状态保存在要返回的会话中。因此,UploadUsers将消息添加到Session,而GetMessages检索消息并将其显示给客户端。 问题是即使我异步调用这两个方法,也要等到完成。它只是加载。 我什至在要添

  • 问题内容: 在我的应用程序(node / express / redis)中,我使用一些代码同时更新数据库中的多个项目: 我可以确定在方法返回之前将执行所有这些操作吗?我关心的是异步处理。由于我不在db操作中使用回调函数,因此可以吗? 问题答案: 使用MULTI / EXEC命令创建命令队列并连续执行它们。然后使用回调发送回连贯的响应(成功/失败)。请注意,您必须使用Redis的AOF来避免这种情

  • 问题内容: Redis非常快。在我的机器上,大多数情况下它的速度与node.js中的本机Javascript语句或函数调用一样快。在node.js中编写常规的Javascript代码很容易/很轻松,因为不需要回调。我不明白为什么使用node.js在Redis中获取/设置键/值数据不那么容易。 假设node.js和Redis在同一台机器上,是否有任何npm库允许使用阻塞调用与node.js上的Red