저번주에 저 내용을 배웠고 이거를 실제로 써보는 실습을 한번 했는데

아직 제대로 이해가 안되는 부분이 있어서 이렇게 질문을 해봄


const choice = await new Promise((resolvereject=> {
    
rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select=> {
      
if(select === "1" || select === "2" || select === "q") {
        
resolve(select);
      }
      
else {
        
reject("잘못된 선택입니다. 다시 선택해주세요.");
      }
    });
  });


일단 이해가 안되는 코드는 이거


대충 보면 알겠지만 단순한 코드인데 그냥 1, 2, q 이외의 입력은 전부 reject 시키고 1 2 q 일때는 선택한 값을 resolve 시키는 코드임


근데 여기서 저부분에 await을 안 붙이면 이제 해당 문장을 처리할때


이렇게 입력을 안 받고 그냥 냅다 반복 출력만 하고


만약에 if else로 뭔가 입력에 대한 처리를 해놓으면



입력을 안 받고 그냥 else문으로 가서 거기 문장을 실행해버리더라고?


근데 await을 붙이면 의도한대로 실행이 되길래 질문을 해봄


일단 rl.question() 함수가 비동기 함수여서 promise 객체에서 실행을 돌려서 그 값에 따라 뭘 할려는건 알겠는데


1. 왜 await을 안 붙이면 저 코드가 터져버리는지 모르겠고


2. 아래 두 코드가 대체 무슨 차이이길래 위에꺼는 입력 안 받고 계속 무한 출력하는지 모르겠고

아래꺼는 정상적으로 입력받고 그값을 처리하는건지 감이 잡히지를 않음


이 부분만 조금 설명해줄 수 있을까?


아래 두 코드 다 while(true) 안에 들어가 있다고 생각해줘


const choice = new Promise((resolvereject=> {
        rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select=> {
          if(select === "1" || select === "2" || select === "q") {
            resolve(select);
          }
          else {
            reject("잘못된 선택입니다. 다시 선택해주세요.");
          }
        });
      });
choice
      .then((select=> {
       //여기 내부에서 select 경우 따라 if else로 하려고 했었음
        console.log("사용자 정보 읽기...");
      })
      .catch((error=> {
        reject("잘못된 선택입니다. 다시 선택해주세요.");
      });


const choice = await new Promise((resolvereject=> {
        rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select=> {
          if(select === "1" || select === "2" || select === "q") {
            resolve(select);
          }
          else {
            reject("잘못된 선택입니다. 다시 선택해주세요.");
          }
        });
      });
if(choice === '1') {
        console.log("사용자 정보 읽기...");
      } else if(choice === '2') {
        console.log(`새 사용자가 추가되었습니다.);
      } else {
        console.log("프로그램을 종료합니다.");
        break;
      }