๐Ÿค™๐ŸปPromise Part(4) ์ฝœ๋ฐฑ์ง€์˜ฅ ์ฝ”๋“œ๋ฅผ Promise ๋กœ ๋ฐ”๊พธ๊ธฐ!

๐Ÿค™๐Ÿป์ฝœ๋ฐฑ ์ง€์˜ฅ ์†Œํ™˜

https://dev-seolleung2.netlify.app/development/CallbackHell/

์œ„ ๋งํฌ ๋ธ”๋กœ๊ทธ ๋ง๋ฏธ์˜ ์˜ˆ์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”๋‹ค.

// ๋ฐฑ์—”๋“œ์—์„œ id, password ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ €์žฅ์†Œ UserStorage.
// ํ•˜์ง€๋งŒ ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด๋‹ค.

class UserStorage {
  loginUser(id, password, onSuccess, onError) {
    setTimeout(() => {
      if (
        (id === 'seolleung2' && password === 'iamhandsome') ||
        (id === 'gdragon' && password === 'yakkuk')
      ) {
        onSuccess(id)
      } else {
        onError(new Error('not Found'))
      }
    }, 2000)
  }
  getRoles(user, onSuccess, onError) {
    setTimeout(() => {
      if (user === 'seolleung2') {
        onSuccess({ name: 'seolleung2', role: 'admin' })
      } else {
        onError(new Error('No Access'))
      }
    }, 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)
  }
)

๐Ÿค™๐Ÿป์•„์ด ํ”„๋ผ๋ฏธ์“”~

Callback Hell ์ฝ”๋“œ๋ฅผ Promise ๋กœ ๋ฐ”๊พธ๋Š” ์—ฐ์Šต์„ ํ•ด๋ดค๋‹ค!

class UserStorage {
  loginUser(id, password) {
    // ๋” ์ด์ƒ onSuccess, onError ๊ฐ™์€ ์ฝœ๋ฐฑ ์ „๋‹ฌ๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (
          (id === 'seolleung2' && password === 'iamhandsome') ||
          (id === 'gdragon' && password === 'yakkuk')
        ) {
          resolve(id)
        } else {
          reject(new Error('not Found'))
        }
      }, 2000)
    })
  }
  getRoles(user) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (user === 'seolleung2') {
          resolve({ name: 'seolleung2', role: 'admin' })
        } else {
          reject(new Error('No Access'))
        }
      }, 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(user)) ์™€ ๋™์ผ
  .then(user => alert(`Hello ${user.name}, you have a ${user.role} role`))
  .catch(console.log)

callbacktopromise

์˜ค ์ข‹๋‹ค์ข‹์•„!

์œ„์˜ ์ฝ”๋“œ๋Š” ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ๋Œ์•„๊ฐ„๋‹ค!


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook