刚刚开始接触 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/