[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 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    결국 순차적인 실행을 원하시는 건데 (=동기화)

    작성하신 코드처럼 메인 함수에서 아무런 장치 없이 언제 끝날지 모르는 비동기 로직을 동시에 여러번 실행시키면 그 시점에서 이미 동기화는 힘들어 졌다고 봐야 합니다.

    결론적으로 각 이터레이션 또한 하나의 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에서 돌아가는지는 확신할 수 없네요. ;

    컨셉만 봐주세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)