如何做到这一点,以便我的服务器不会在执行 for 循环时卡住并可以处理其他请求?如果我可以在我的服务器执行其他操作的同时并行执行 for 循环,那就太好了。
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
如何做到这一点,以便我的服务器不会在执行 for 循环时卡住并可以处理其他请求?如果我可以在我的服务器执行其他操作的同时并行执行 for 循环,那就太好了。
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
Async.js有一堆帮助函数,比如foreach,而这正是你在这里所要求的。
编辑:
这是一个完整的例子:
async = require('async');
var i = 0
async.whilst(
// test
function() { return i < 5; },
// loop
function(callback) {
i++;
console.log('doing stuff.');
process.nextTick(callback);
},
// done
function (err) {
console.log('done!');
}
);
哪个输出:
doing stuff.
doing stuff.
doing stuff.
doing stuff.
done!
编辑 2:将命名函数更改为注释以避免混淆。
您可以使用process.nextTick
将功能移开,但它不会真正并行,Node.js 是一种事件驱动语言,因此它并不真正执行线程。这是使用的概述process.nextTick
。
根据@Slace 的回答,您可以使用异步递归。
socket.on('drawing', function {
var i = 0;
(function someFunction() {
if (i < x.length - 1) {
i++;
// Do stuff.
process.nextTick(someFunction)
} else {
// Do something else.
}
}());
});