无法使我的示例函数异步

时间:2013-07-08 20:27:01

标签: 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");

2 个答案:

答案 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