제출할 디렉토리 이름 | ex01/ |
---|---|
제출할 파일 이름 | recipe_callback.js |
성결대학교에서 공부를 하고 있는 천민우
는 최근 새로나온 전자기기를 구입하기 위해 안양1번가
를 전전하며 알바를 구하기 시작하였다.
그 결과 안양1번가의 명물 꽈배기 집에 알바로 들어가게 되었다!
민우
는 꽈배기를 만드는 업무에 배정을 받게 되었는데, 꽈배기를 만들려면 다음 아래와 같은 작업을 진행하게 된다.
해당 작업은 아래와 같은 순서와 시간이 걸리게 된다.
민우
는 위와 같은 작업을 할 수 있는 js
코드를 구현할려고 한다, 천민우
를 도와주자!!!!
setTimeout
함수를 이용하여 구현해야 한다.console.log
를 이용하여 단계명을 출력해야한다. (이때 실패하였다는 내용도 출력을 해주어야 한다.)function randomFail() {
if (Math.random() < 0.2) throw "제작 실패..!(월급이 삭감되었다 ㅜㅜ)";
}
// 제작 실패시 랜덤 출력
function randomFail() {
if (Math.random() < 0.2) throw "제작 실패..!(월급이 삭감되었다 ㅜㅜ)";
}
// 반죽 만들기
function makeDough() {
console.log("반죽 만들기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
randomFail();
console.log("반죽 완성!");
resolve();
} catch (error) {
console.log("반죽 만들기 실패...");
reject(error);
}
}, 3000);
});
}
// 1차 발효
function firstFermentation() {
console.log("1차 발효 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
randomFail();
console.log("1차 발효 성공!");
resolve();
} catch (error) {
console.log("1차 발효 실패...");
reject(error);
}
}, 5000);
});
}
// 성형 하기
function shape() {
console.log("성형 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
randomFail();
console.log("성형 성공!");
resolve();
} catch (error) {
console.log("성형 실패...");
reject(error);
}
}, 4200);
});
}
// 2차 발효
function secondFermentation() {
console.log("2차 발호 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
randomFail();
console.log("2차 발효 완료!");
resolve();
} catch (error) {
console.log("2차 발효 실패...");
reject(error);
}
}, 2000);
});
}
//투기기
function fry() {
console.log("튀기기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
randomFail();
console.log("튀기기 완료!");
resolve();
} catch (error) {
console.log("튀기기 실패...");
reject(error);
}
}, 5000);
});
}
// 꽈배기 제작
async function make() {
try {
await makeDough();
await firstFermentation();
await shape();
await secondFermentation();
await fry();
console.log("꽈배기 제작 완료!");
} catch (error) {
console.log(error);
}
}
make();
제출할 디렉토리 이름 | ex02 |
---|---|
제출할 파일 이름 | spaghetti.js |
꽈배기 알바만으로 부족했던 민우
는 시간을 쪼개 스파게티스토리에서 투잡을 뛰기로 결정했다. 다행히 작업 방식은 꽈배기랑 비슷해 이번에도 JS로 구현하기로 결정했다!
스파게티를 만드는 작업과 소요시간은 다음과 같다.
1️⃣
A. 면 삶기 - 10초
2️⃣
B1. 브로콜리 대치기 - 1초
B2. 마늘과 양파 볶기 - 2초
B3. 배이컨과 햄 볶기 - 2초
B4. 소스, 남은 야채 넣고 다같이 볶기 - 3초
3️⃣
C. 면까지 넣고 다 같이 볶기 - 3초
다만, 작업을 진행할 때 순차적으로 진행하면 만드는데 시간이 오래 걸릴 것 같아, 작업A와 B를 동시에 하면서 A와 B 작업이 모두 끝났을 때 C작업을 하기로 결정했다.
두개의 프로미스를 한번에 실행하려면 각각의 프로미스를 배열에 넣고 Promise.all 함수로 실행시켜주면 된다.
function firstTask() {
return new Promise((resolve) => {
setTimeout(() => {
console.log("첫 번째 작업 완료");
resolve(1);
}, 2000);
});
}
function secondTask() {
return new Promise((resolve) => {
setTimeout(() => {
console.log("두 번째 작업 완료");
resolve(2);
}, 3000);
});
}
async function runTasks() {
try {
const results = await Promise.all([firstTask(), secondTask()]);
console.log("모든 작업 완료, 결과: ", results);
} catch (error) {
console.log(error);
}
}
runTasks();
function boilNoodles() {
console.log();
console.log("<---- A 작업 시작 ---->");
console.log("면 삶기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("면 삶기 완료");
console.log("!!!!!!! A 작업 모두 완료 !!!!!!! ");
console.log();
resolve();
}, 1000);
});
}
function processB1() {
console.log();
console.log("<---- B 작업 시작 ---->");
console.log("브로콜리 대치기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("브로콜리 대치기 완료");
resolve();
}, 1000);
});
}
function processB2() {
console.log("마늘과 양파 볶기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("마늘과 양파 볶기 완료");
resolve();
}, 2000);
});
}
function processB3() {
console.log("베이컨과 햄 볶기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("베이컨과 햄 볶기 완료");
resolve();
}, 2000);
});
}
function processB4() {
console.log("소스, 남은 야채 넣고 다같이 볶기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("소스, 남은 야채 넣고 다같이 볶기 완료");
resolve();
}, 3000);
});
}
async function processB() {
//B프로세스 4개를 하나씩 처리
await processB1();
console.log("");
await processB2();
console.log("");
await processB3();
console.log("");
await processB4();
console.log("!!!!!!! B 작업 모두 완료 !!!!!!!");
console.log();
}
function mixAllTogether() {
console.log();
console.log("<---- C 작업 시작 ---->");
console.log("면까지 넣고 다 같이 볶기 시작");
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("면까지 넣고 다 같이 볶기 완료");
console.log("!!!!!!! C 작업 모두 완료 !!!!!!!");
console.log();
resolve();
}, 3000);
});
}
async function makeSpaghetti() {
try {
const promiseA = boilNoodles();
const promiseB = processB();
await Promise.all([promiseA, promiseB]);
await mixAllTogether();
console.log("스파게티 제작 완료!");
console.log();
} catch (error) {
console.log(error);
}
}
makeSpaghetti();