javascript - 无法使我的示例函数异步

标签 javascript node.js exec

刚刚开始接触 Js 和 Node。我下面有以下代码片段,其中 libFunction 应该异步工作。是的,你猜对了,它是同步工作的。

“从回调打印”在“从主打印”之前打印。你觉得我哪里搞砸了?谢谢

var exec = require("child_process").exec

function blocking()
{
    var start = new Date().getTime();
    while(new Date().getTime() < start + 5000);
} 

function libFunction(callback)
{
    exec(blocking(), callback("print from callback"));
}

function callback(txt)
{
    console.log(txt);
}

libFunction(callback);

console.log("print from main");

最佳答案

您应该使用这种类型的代码来进行非阻塞调用。

function libFunction(callback)
{
    setTimeout(function(){callback("print from callback");}, 5000);
}

在函数阻塞中,while循环显然阻塞,因此程序在5秒完成之前不执行任何操作。 Node.js 不是多线程的,因此从主等待打印从回调打印到完成。

请注意exec 是异步的假设是错误的,而它启动新线程的假设甚至更错误 - javascript 根本不是多线程的(不包括 Worker)。

另一方面,对 setTimeout 的调用是异步的

关于javascript - 无法使我的示例函数异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535409/

相关文章:

javascript - Fancytree:在 DOM 中可见的新 child (通过 LacyLoad 加载)之后的事件

javascript - 在 JS 上注册按钮点击处理程序的函数

Javascript:将文本添加到文本区域

javascript - 将 python 中的嵌套排序循环转换为 javascript

javascript - 我是 Node 新手。 js,我想知道如何处理 Mongoose 咨询结果?

JavaScript 异步编程

java - 按进程划分的浏览器关闭事件

c - 如何在另一个子进程完成时终止子进程?

javascript - app.get 和 app.post 在 node.js 中获取值

java - 无法从 exec Java 方法运行 linux 命令