[Node.js, Nodejs] 여러 함수를 완전하게 동기적으로 처리하는 방법
조회수 2457회
안녕하세요. 현재 Nodejs로 동기처리를 하는 도중에 문제가 있어서 이렇게 질문드립니다.
async function asyncMain () {
console.log('1. 시작');
if(a == 0){
await a_multiplier();
} else{
// console.log("a: ",a);
let blist= await blist();
if(blist.errorMessage === 'Invalid'){
a_multiplier = 0;
} else {
if(blist == ""){
await corder(2,1,3);
} else {
let d = await blist();
await dorder(d[0]);
await asyncResult();
console.log("");
};
};
};
};
위를 완전 동기방식으로 진행하려면 어떻게 해결해야 할까요?
참고로 계속 실행하는 방법으로
setInterval(function(){
setImmediate(()=>{
asyncMain();
},"");
},5000);
를 사용하고 있습니다.
제가 원하는 방향은 순서대로만 실행이 되는 코드를 짜고 싶습니다.
1 답변
-
결국 순차적인 실행을 원하시는 건데 (=동기화)
작성하신 코드처럼 메인 함수에서 아무런 장치 없이 언제 끝날지 모르는 비동기 로직을 동시에 여러번 실행시키면 그 시점에서 이미 동기화는 힘들어 졌다고 봐야 합니다.
결론적으로 각 이터레이션 또한 하나의 async job이라 생각하고 접근해야 할 듯 합니다.
메인 함수 자체를 async로 만들어서 재귀시키는 코드로 작성해 보았습니다.
function wait() { return new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve(); }, 1000 + Math.random() * 4000); //1~5s wait }); } async function asyncMain() { // asyncMain is also async job return new Promise(async (resolve, reject)=>{ console.log('1'); await wait(); console.log('2'); await wait(); console.log('3'); await wait(); resolve(); }); } async function main() { // sync await asyncMain(); // and recursion main(); } // fire main();
크롬 브라우저 개발자 도구상에서 테스트한 것이라 Node.js에서 돌아가는지는 확신할 수 없네요. ;
컨셉만 봐주세요.
댓글 입력