저번주에 저 내용을 배웠고 이거를 실제로 써보는 실습을 한번 했는데
아직 제대로 이해가 안되는 부분이 있어서 이렇게 질문을 해봄
const choice = await new Promise((resolve, reject) => {
rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select) => {
if(select === "1" || select === "2" || select === "q") {
resolve(select);
}
else {
reject("잘못된 선택입니다. 다시 선택해주세요.");
}
});
});
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((resolve, reject) => {
rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select) => {
if(select === "1" || select === "2" || select === "q") {
resolve(select);
}
else {
reject("잘못된 선택입니다. 다시 선택해주세요.");
}
});
});
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("잘못된 선택입니다. 다시 선택해주세요.");
});
.then((select) => {
//여기 내부에서 select 경우 따라 if else로 하려고 했었음
console.log("사용자 정보 읽기...");
})
.catch((error) => {
reject("잘못된 선택입니다. 다시 선택해주세요.");
});
const choice = await new Promise((resolve, reject) => {
rl.question('선택하려는 번호를 입력하세요 (또는 "q"를 입력하여 종료): ', (select) => {
if(select === "1" || select === "2" || select === "q") {
resolve(select);
}
else {
reject("잘못된 선택입니다. 다시 선택해주세요.");
}
});
});
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;
}
console.log("사용자 정보 읽기...");
} else if(choice === '2') {
console.log(`새 사용자가 추가되었습니다.);
} else {
console.log("프로그램을 종료합니다.");
break;
}