1

刚开始玩 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");
4

2 回答 2

0

您在这里有多个错误。

exec用于执行子进程,而不是运行进程内 javascript 代码。它需要一个字符串,但您的代码给出了它undefined。它还需要一个回调函数,但你也给它 undefined ,因为你自己调用回调而不是仅仅它传递给exec. 非常小心someFunction(arg1, callback)(无括号)与someFunction(arg1, callback())(括号)。完全不同!

如果您想尝试异步函数和回调,请使用setTimeout@sasha.sochka 发布的示例。

于 2013-07-08T20:38:33.123 回答
0

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

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

在函数blocking while循环中显然阻塞的,所以程序在 5 秒完成之前什么都不做。Node.js 不是多线程的,因此从主打印等待从回调打印到完成。

请注意exec异步的假设是错误的,并且它开始一个新的步骤的假设甚至是错误的 - javascript 根本不是多线程的(不计算Workers)。

另一方面调用setTimeout是异步的

于 2013-07-08T20:32:06.197 回答