어떻게 내 서버가 for 루프를 수행하지 못하고 다른 요청을 처리 할 수 있도록합니까? 내 서버가 다른 작업을 수행하는 동안 for 루프를 병렬로 수행하면 좋을 것입니다.node.js에서 병렬 작업을 할당하는 방법
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
어떻게 내 서버가 for 루프를 수행하지 못하고 다른 요청을 처리 할 수 있도록합니까? 내 서버가 다른 작업을 수행하는 동안 for 루프를 병렬로 수행하면 좋을 것입니다.node.js에서 병렬 작업을 할당하는 방법
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
@ 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.
}
}());
});
당신은 멀리 기능을 이동 process.nextTick
를 사용할 수 있지만 진정한 병렬 습관은 Node.js를 그것이 정말 스레드를하지 않도록 이벤트 중심의 언어이다. Here's의 사용 개요는 process.nextTick
입니다.
Async.js에는 foreach 및 whilst과 같은 도우미 기능이있어 여기에서 요구하는 것과 정확히 일치합니다.
편집 :
다음은 전체 예제 :
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 : 혼란 사람을 피하기 위해 의견에 이름 지정된 함수 변경되었습니다.