node 비동기 while 방식 control flow 를 처리
개요
node 로 프로그래밍 할경우 가끔 while 방식의 control flow 를 처리해야 하는 경우가 있다
문제는 node 에서는 next()로 밀어 버리기때문에 일반적인 while 방식으로 처리할수 없다는 것이다.
문제는 node 에서는 next()로 밀어 버리기때문에 일반적인 while 방식으로 처리할수 없다는 것이다.
해서 recursive 구조를 사용할 경우 call stack error 때문에 시도 할 수 없는 경우가 많다.
하지만 아래과 같은 방식으로 처리 가능하다.
하지만 아래과 같은 방식으로 처리 가능하다.
코드
function isProcessNextJob(callback){
#db query or some other conditions
#db.find(function(){
# if(spots.length){
# return callback(true);
# }else{
# return callback(false);
# }
#})
return callback(true);
}
function doRecursiveWork(){
isProcessNextJob(function(result){
console.log(result)
if(result == false){
return;
}else{
setTimeout(doRecursiveWork,0);
}
});
}
doRecursiveWork();
한계
물론 위의 문장도 한계가 있다 일단 this 키워드를 사용할수 없으며
call stack 을 새로 만들기 때문에 scope chain 을 사용할수 없다.
하지만 while 방식의 control flow 일 경우 위의 모든것을 감수 하고도 사용 할만한
하나의 대용쯤은 될수 있을 거 같다.
call stack 을 새로 만들기 때문에 scope chain 을 사용할수 없다.
하지만 while 방식의 control flow 일 경우 위의 모든것을 감수 하고도 사용 할만한
하나의 대용쯤은 될수 있을 거 같다.
추가내용
settimeout 은 javascript engine 의 event loop 에 새로운 message 를 추가하는 방식으로 작동한다.
*일반적인 함수 호출은 스택위에 싸이는 방식으로 작동
*일반적인 함수 호출은 스택위에 싸이는 방식으로 작동