javscript - 콜백 지옥

김동하·2020년 9월 25일
0

javascript

목록 보기
31/58
class UserStorage {
    loginUser(id, password, onSuccess, onError) {
        setTimeout(() => {
            if (
                (id === "dongha" && password === 1234) ||
                (id = "dongeun" && password === 1234)
            ) {
                onSuccess(id)
            } else {
                onError(new Error("not found"))
            }
        }, 2000)

    }
    getRoles(user, onSuccess, onError) {
        setTimeout(() => {
            if (user === "dongha") {
                onSuccess({
                    name: "dongha",
                    role: "admin"
                })
            } else {
                onError(new Error("no access"))
            }
        }, 1000)
    }
}

콜백으로 물린 코드를 promise로 바꾼다.

loginUser(id, password) {
     return new Promise((resolve, reject)=>{
           setTimeout(() => {
            if (
                (id === "dongha" && password === 1234) ||
                (id = "dongeun" && password === 1234)
            ) {
                resolve(id)
            } else {
                reject(new Error("not found"))
            }
        }, 2000)
     })

loginUser의 파라메터로 id, password만 주고 return 값으로 promise를 준다.

getRoles(user) {
    setTimeout(() => {
        return new Promise((resolve, reject) => {
            if (user === "dongha") {
                resolve({
                    name: "dongha",
                    role: "admin"
                })
            } else {
                reject(new Error("no access"))
            }
        }, 1000)
    })
}

getRoles도 바꿔준다.

const userStorage = new UserStorage()
const id = prompt("id")
const password = prompt("password")

userStorage
.loginUser(id,password)
.then(user => userStorage.getRoles(user))
.then(user => alert(`hi ${username}, you are ${{user.role}}`))
.catch(console.log)

// 아래는 콜백지옥
userStorage.loginUser(
    id,
    password,
    (user) => {
        userStorage.getRoles(
            user,
            (userWithRole) => {},
            (error) => {}
        )
    },
    (error) => {
        console.log(error)
    }
)
//

then으로 콜백지옥 해결!

profile
프론트엔드 개발

0개의 댓글