Switch asynchronous callback(비동기 콜백) to Promise Example

 

'use strict';

class UserInfor{
    UserInfor(id, passWord){
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                if(
                    (id === 'Alex' && passWord === '1234'||
                    (id === 'Jhon' && passWord === '5678'||
                    (id === 'Mical' && passWord === '123')
                ){
                    resolve(id);
                }
    
                else if((id !== 'Alex'&& (id !== 'Jhon'&& (id !== 'Mical')) {
                    reject(new Error(`id ${id} doesn't exist`));
                }
    
                else{
                    reject(new Error(`Password is wrong`));
                }
    
            }, 1000)
        })
        
    }

    getInfor(user) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                if(user === 'Alex' || user === 'Jhon' || user === 'Mical'){
                    if(user === 'Alex'resolve({ name : 'Alex', job : 'Programmer' });
                    else if(user === 'Jhon'resolve({ name : 'Jhon', job : 'Builder' });
                    else if(user === 'Mical'resolve({ name : 'Mical', job : 'Writer' });
                }
    
                else{
                    reject(new Error(`Error ${user}`));
                }
            }, 2500);
        })
        
    }
}


 const userInput = new UserInfor(); // userInput Class선언
 const id = prompt('Enter your ID'); // id 입력
 const passWord = prompt('Enter your Password'); // 비밀번호 입력

 userInput.UserInfor(id, passWord)
    .then(id => userInput.getInfor(id))
    .then(userInfo => console.log(`name : ${userInfo.name}, password : ${userInfo.role}`))
    .catch(error => console.log(error))
    .finally(() => console.log('Finish'));


Promise를 리턴할때 'new'를 붙이지 않으면 에러 발생


getInfor(user) {
        return Promise((resolve, reject) => {
            setTimeout(() => {
                if(user === 'Alex' || user === 'Jhon' || user === 'Mical'){
                    if(user === 'Alex'resolve({ name : 'Alex', job : 'Programmer' });
                    else if(user === 'Jhon'resolve({ name : 'Jhon', job : 'Builder' });
                    else if(user === 'Mical'resolve({ name : 'Mical', job : 'Writer' });
                }
    
                else{
                    reject(new Error(`Error ${user}`));
                }
            }, 2500);
        })
        
    }


위 코드는 'getInfor()'메소드에서 Promise를 리턴할때 new를 주지 않은 상태이다 이제 결과를 확인해보자


예상대로 에러가 나왔다. 설사 id, password를 제대로 입력해도 'new'를 Promise앞에 붙여주지 않았기 때문에 undefined가 됬다.


위 코드의 콜백함수 코드는 'Build  asynchronous callback(비동기 콜백) Example'글 참고









댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Lesson 12_2 참조를 이용한 프로퍼티노드(Property Node)