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

10-13 05:32