【发布时间】:2014-06-26 02:30:37
【问题描述】:
为了在 nodejs 中理解非阻塞,我编写了如下代码:循环数组中的元素,对于每个元素,在记录元素之前“休眠”一段时间。预计所有 console.log 都应该非常接近地执行,因为它没有被睡眠阻塞,但实际上不是:这里哪里出错了?
var data = [];
for (var i = 0; i <= 100; i++) {
data.push(i);
}
function sleep(milliSeconds, callback) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
var print = function(content) {
sleep(1000, function(){
callback();
});
console.log(String(content) + ': ' + String((new Date()).getTime()));
};
for (var item in data) {
print(item);
}
【问题讨论】:
-
呃,你的
sleep函数被阻塞了??? -
什么是
callback?为什么它从来没有被调用?为什么不使用setTimeout? -
所有 javascript 执行在 node.js 中都是阻塞的,其他的可以是
fs.readFileSync但不一定是fs.readFile。您的代码示例都是 javascript 执行,因此都是阻塞的。 -
感谢@Bergi,之前我认为使用睡眠来假装该功能是一项耗时的任务,基于此我试图了解node.js中的非阻塞
-
node.js 中的非阻塞通常意味着“耗时但异步”。您需要使用异步的 api。
标签: javascript node.js asynchronous