刚开始与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);
}
在功能
blocking
while
中,循环显然处于阻塞状态,因此程序在5秒结束之前不执行任何操作。 Node.js不是多线程的,因此从main进行的打印等待从回调完成的打印。请注意,
exec
是异步的假设是错误的,而它开始新的过渡的假设甚至是错误的-javascript根本不是多线程的(不计算Worker
s)。另一方面,对
setTimeout
的调用是异步的关于javascript - 无法使我的示例函数异步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17535409/