Node.js的function与callbackdos't运行asynchronous

我试图以asynchronous的方式运行一个函数,但我总是recive结果的顺序,我打电话给他们,而不是收到最快的function。

这是一个例子。 预期的结果是打印第一个100甚至被称为最后一个。

function f1(callback){ i = 0; for (i;i< 100;i++){ } if (i == 100){ return callback(i); } } function f2(callback){ i = 0; for (i;i< 99999999999;i++){ } if (i == 99999999999){ return callback(i); } } f2(function(i){ console.log(i); }) f1(function(i){ console.log(i); }); 

在节点(通常在JavaScript中),默认情况下函数不是asynchronous的。

在上面的代码中,你没有任何控制权的JavaScript的事件循环。 当你调用每个函数时,它会遍历它的for循环,直到完成,然后callback,这就是为什么你看到输出的方式。

节点的asynchronous性质在开始执行IO时启动,或者特意将控制权交给VM,并使其有机会处理事件循环中的其他事件。

要查看上面的代码,为了testing目的,以asynchronous方式运行:

 function f1(callback){ setTimeout(callback('f1'), 100); } function f2(callback){ setTimeout(callback('f2'), 500); } f2(function(i){ console.log(i); }) f1(function(i){ console.log(i); }); 

setTimeout调用基本上只是说:callback提供的函数接近n毫秒(你可以(但不是之前))。 基本上作为一个睡眠声明在这里,并产生控制回到当前正在执行的代码。