์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋ฆด๋ ˆ์ด์˜ˆ์ œ ํ”„๋กœ๋ฏธ์Šค vs ์ฝœ๋ฐฑ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

by esoesmio 2023. 5. 17. 17:32

๋ณธ๋ฌธ

ํ”„๋กœ๋ฏธ์Šค

 

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, '์•„์•„, ์•„๊น์Šต๋‹ˆ๋‹ค...');
      }, '์ •์•„์—๊ฒŒ ๋ฌด๋ฆฌ์˜€๋‚˜๋ณด๋„ค์š”.');
    }, '๋Œ์ค€์ด ๋ถ„๋ฐœํ•ด๋ผ.');
  }, '์˜ํฌ๊ฐ€ ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ๋„ค์š”.');
}, '์ฒ ์ˆ˜๋ถ€ํ„ฐ ๊ด‘ํƒˆ์ž…๋‹ˆ๋‹ค. ใ… ใ… ');

๋Œ“๊ธ€ ์˜์—ญ