刚开始玩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");
答案 0 :(得分:0)
您应该使用此类代码进行非阻塞调用。
function libFunction(callback)
{
setTimeout(function(){callback("print from callback");}, 5000);
}
在函数blocking
while
循环中,显然 阻塞,因此程序在5秒完成之前不执行任何操作。 Node.js不是多线程的,因此主要的waites打印从回调打印到完成。
注意 exec
是异步的假设是错误的,并且假设它开始了新的步骤甚至是wronger - javascript根本不是多线程的(不计算{{1} } S)。
另一方面,对Worker
的调用是异步的
答案 1 :(得分:0)
这里有多个错误。
exec
用于执行子进程,而不是运行进程内javascript代码。它需要一个字符串,但是你的代码给它undefined
。它还需要一个回调函数,但你也是未定义的,因为你自己调用回调而不是将传递给exec
。要非常小心someFunction(arg1, callback)
(没有括号)与someFunction(arg1, callback())
(括号)。完全不同!
如果您想尝试异步函数和回调,请使用{sasha.sochka发布的示例中的setTimeout
。