ํ๋ก๋ฏธ์ค
const DEADLINE = 1400;
function getRelayPromise (name, start, failMsg) {
console.log(`๐ ${name} ์ถ๋ฐ`);
// ๐ก ๋๋ค ์๊ฐ๋งํผ ๋ฌ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ฒ ๋ค๋ ์ฝ์์ ๋ง๋ค์ด ๋ฐํ
return new Promise((resolve, reject) => {
const time = 1000 + Math.random() * 500;
setTimeout(() => {
if (time < DEADLINE) {
console.log(`๐ฉ ${name} ๋์ฐฉ - ${(start + time)/1000}์ด`);
resolve(start + time);
} else {
console.log(failMsg);
reject((start + time) / 1000);
}
}, time);
})
}
getRelayPromise('์ฒ ์', 0, '์ฒ ์๋ถํฐ ๊ดํ์
๋๋ค. ใ
ใ
')
.then(result => {
return getRelayPromise('์ํฌ', result, '์ํฌ๊ฐ ์์ฃผํ์ง ๋ชปํ๋ค์.');
})
.then(result => {
return getRelayPromise('๋์ค', result, '๋์ค์ด ๋ถ๋ฐํด๋ผ.');
})
.then(result => {
return getRelayPromise('์ ์', result, '์ ์์๊ฒ ๋ฌด๋ฆฌ์๋๋ณด๋ค์.');
})
.then(result => {
return getRelayPromise('๊ธธ๋', result, '์์, ์๊น์ต๋๋ค...');
})
.catch(msg => {
console.log(`๐ข ์์ฃผ ์คํจ - ${msg}์ด`);
})
.finally(() => {
console.log('- - ๊ฒฝ๊ธฐ ์ข
๋ฃ - -');
});
์ฝ๋ฐฑ
const DEADLINE = 1400;
function relayRun (name, start, nextFunc, failMsg) {
console.log(`๐ ${name} ์ถ๋ฐ`);
const time = 1000 + Math.random() * 500;
setTimeout(() => {
if (time < DEADLINE) {
console.log(`๐ฉ ${name} ๋์ฐฉ - ${(start + time)/1000}์ด`);
nextFunc?.(start + time);
} else {
console.log(failMsg);
console.log(`๐ข ์์ฃผ ์คํจ - ${(start + time)/1000}์ด`);
}
if (time >= DEADLINE || !nextFunc) {
console.log('- - ๊ฒฝ๊ธฐ ์ข
๋ฃ - -');
}
}, time);
}
relayRun('์ฒ ์', 0, start1 => {
relayRun('์ํฌ', start1, start2 => {
relayRun('๋์ค', start2, start3 => {
relayRun('์ ์', start3, start4 => {
relayRun('๊ธธ๋', start4, null, '์์, ์๊น์ต๋๋ค...');
}, '์ ์์๊ฒ ๋ฌด๋ฆฌ์๋๋ณด๋ค์.');
}, '๋์ค์ด ๋ถ๋ฐํด๋ผ.');
}, '์ํฌ๊ฐ ์์ฃผํ์ง ๋ชปํ๋ค์.');
}, '์ฒ ์๋ถํฐ ๊ดํ์
๋๋ค. ใ
ใ
');
๋๊ธ ์์ญ