Zoeeey
Stack flows in you
Zoeeey
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (155)
    • ๐Ÿ’ก UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • ๐ŸŸจ JavaScript (66)
      • ๊ฐœ๋… (42)
      • ์ •๋ฆฌ (2)
      • ๋ฌธ์ œํ’€๊ธฐ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, ์ฝ”๋”ฉ์• ํ”Œ) (15)
      • ์‘์šฉํ•˜์—ฌ ์ž๋™ํ™”or๋ฌธ์ œํ•ด๊ฒฐํ•˜๊ธฐ (2)
      • ๊ธฐํƒ€ (5)
    • โš›๏ธ React (49)
      • ๊ฐœ๋… (27)
      • ๊ฐœ๋…(Redux) (3)
      • ์ •๋ฆฌ (4)
      • ๋ฌธ์ œํ’€๊ธฐ (์ฝ”๋”ฉ์• ํ”Œ: React) (15)
    • ๐Ÿ“˜ TypeScript (10)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€๊ธฐ (์ฝ”๋”ฉ์• ํ”Œ) (2)
    • ๐ŸŒ HTML,CSS (18)
      • ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋“ค (10)
      • ๋’ค๋Šฆ๊ฒŒ ์•Œ์•„์„œ ๋ผˆ์•„ํ”ˆ ์œ ์šฉํ•œ CSS (6)
      • ๊ธฐํƒ€ ์ž์ฃผ ์“ฐ๋Š” CSS (2)
    • ๐Ÿ’ป CS (8)
      • CS (5)
      • ์ •๊ทœํ‘œํ˜„์‹ (2)
      • Git,Github (1)

ํƒœ๊ทธ

  • CSS
  • axios
  • json
  • Ajax
  • state
  • useEffect
  • redux
  • class
  • array
  • ์˜ค๋ฅ˜
  • JavaScript
  • object
  • UXUI
  • ์ฝ”๋”ฉ์• ํ”Œ
  • TypeScript
  • react
  • ์‚ผํ•ญ์—ฐ์‚ฐ์ž
  • Props
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • CS
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
hELLO ยท Designed By ์ •์ƒ์šฐ.
Zoeeey

Stack flows in you

๐ŸŸจ JavaScript/๊ฐœ๋…

[๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (4) : ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ, Promise (callback hell ์ฝ”๋“œ๊ฐœ์„ ํ•˜๊ธฐ)

2022. 10. 4. 17:44

Callback Hell ์˜ˆ์‹œ

์ด์ „์‹œ๊ฐ„์— ๋งŒ๋“ค์—ˆ๋˜ ์ฝœ๋ฐฑ์ง€์˜ฅ ์˜ˆ์‹œ๋‹ค.

// ๊ธฐ๋ณธ์„ธํŒ…
class UserStorage {
  loginUser(id, password, onSuccess, onError) {
    setTimeout(() => {
      if (
        (id === 'master' && password === 'master00') ||
        (id === 'submaster' && password === 'submaster00')
      ) {
        onSuccess(id);
      } else {
        onError(new Error('not found'));
      }
    }, 2000);
  }
  
  getRoles(user, onSuccess, onError) {
    setTimeout(() => {
      if (user === 'master') {
        onSuccess({name: 'Master', role : 'admin'});
      } else {
        onError(new Error('Go away!'));
      }
    }, 1000);
  }
}


// ์ฝœ๋ฐฑ์ง€์˜ฅ
const userStorage = new UserStorage();
const id = prompt('Enter your id');
const password = prompt('Enter your password');
userStorage.loginUser(
  id,
  password,
  user => {
    userStorage.getRoles(
      user,
      userWithRole => {
        alert(
         'Hello ${userWithRole.name}, you have a ${userWithRole.role} role'
        );
      },
      error => {
        console.log(error);
      }
    );
  },
  error => {
    console.log(error);
  }
);

์ด๋ฅผ promise๋ฅผ ์ด์šฉํ•ด ๊น”๋”ํ•˜๊ฒŒ ๊ฐœ์„ ํ•ด ๋ณด์ž.


๊ฐœ์„ ๋œ ์ฝ”๋“œ

class UserStorage {
  loginUser(id, password) { //onSuccess, onError๊ฐ™์€ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
    return new Promise((resolve, reject) => { //์ƒˆ๋กœ์šด promise๋ฅผ ๋งŒ๋“ ๋‹ค.
      setTimeout(() => {
        if (
          (id === 'master' && password === 'master00') ||
          (id === 'submaster' && password === 'submaster00')
        ) {
          resolve(id); //onSuccess ๋Œ€์‹  resolve
        } else {
          reject(new Error('not found')); //onError ๋Œ€์‹  reject
        }
      }, 2000);
    });
  }
  
  getRoles(user) {//onSuccess, onError๊ฐ™์€ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
    return new Promise((resolve, reject) => { //์ƒˆ๋กœ์šด promise๋ฅผ ๋งŒ๋“ ๋‹ค.
      setTimeout(() => {
        if (user === 'master') {
          resolve({name: 'Master', role : 'admin'}); //onSuccess ๋Œ€์‹  resolve
        } else {
          reject(new Error('Go away!')); //onError ๋Œ€์‹  reject
        }
      }, 1000);
    });
  }
}


const userStorage = new UserStorage();
const id = prompt('Enter your id');
const password = prompt('Enter your password');

userStorage
  .loginUser(id, password)
  .then(userStorage.getRoles) //.then(user => userStorage.getRoles)์—์„œ ์ถ•์•ฝ ๊ฐ€๋Šฅ (์ธ์ž๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ)
  .then(user => alert(`Hello ${user.name}, you have a ${user.role} role`))
  .catch(console.log);

์ถœ์ฒ˜ : ๋“œ๋ฆผ์ฝ”๋”ฉ https://www.youtube.com/@dream-coding / MDN https://developer.mozilla.org/ko/

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐ŸŸจ JavaScript > ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ฝ”๋”ฉ์• ํ”Œ] ์š”์†Œ์˜ ๋†’์ด์™€ ์œ„์น˜๊ฐ’ ๊ตฌํ•˜๊ธฐ (clientHeight, offsetHeight, scrollHeight, getBoundingClientRect())  (0) 2023.01.11
[์ฝ”๋”ฉ์• ํ”Œ] ์Šคํฌ๋กค ์ด๋ฒคํŠธ  (0) 2023.01.11
[๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (3) : promise๋กœ Error Handlingํ•˜๊ธฐ (reject, catch ํ™œ์šฉ)  (0) 2022.10.04
[๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (2) : ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ, Promise (State, Producing)  (0) 2022.07.22
[๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (1) : ์ฝœ๋ฐฑ์ง€์˜ฅ ์˜ˆ์‹œ  (0) 2022.07.22
    '๐ŸŸจ JavaScript/๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [์ฝ”๋”ฉ์• ํ”Œ] ์š”์†Œ์˜ ๋†’์ด์™€ ์œ„์น˜๊ฐ’ ๊ตฌํ•˜๊ธฐ (clientHeight, offsetHeight, scrollHeight, getBoundingClientRect())
    • [์ฝ”๋”ฉ์• ํ”Œ] ์Šคํฌ๋กค ์ด๋ฒคํŠธ
    • [๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (3) : promise๋กœ Error Handlingํ•˜๊ธฐ (reject, catch ํ™œ์šฉ)
    • [๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (2) : ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ, Promise (State, Producing)
    Zoeeey
    Zoeeey
    ๊ธธ๊ฒŒ ์ƒ๊ฐํ•˜๊ณ  ์งง๊ฒŒ ๊ทธ๋ฆฌ๊ธฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”