ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11. Promise
    JavaScript & TypeScript 2020. 11. 15. 15:22
    • Promise is a JavaScript object for asynchronous operation
    • state: pending -> fulfilled or rejected
    • Producer vs Consumer

     

    1. Producer

    • when new Promise is created, the executor runs automatically
    const promise = new Promise((resolve, reject) => {
        // doing some heavy work (network, read files)
        console.log('doing something....');
        setTimeout(() => {
            // resolve('ellie');
            reject(new Error('no network'));
        }, 2000);
    });

     

     

    2. Consumers: then, catch, finally

    promise
        .then(value => {
            console.log(value);
        })
        .catch(error => {
            console.log(error);
        })
        .finally(() => console.log('finally')
        });

     

     

    3. Promise chaning

    const fetchNumber = new Promise((resolve, reject) => {
        setTimeout(() => resolve(1), 1000);
    });
    
    fetchNumber
        .then(num => num * 2)
        .then(num => num * 3)
        .then(num => {
            return new Promise((resolve, reject) => {
                setTimeout(() => resolve(num - 1), 1000);	
            });
        })
        .then(num => console.log(num)); // 5

     

     

    4. Error Handling

    const getHen = () =>
        new Promise((resolve, reject) => {
            setTimeout(() => resolve('HEN'), 1000);
        });
    const getEgg = hen =>
        new Promise((resolve, reject) => {
            setTimeout(() => reject(new Error(`error! ${hen} => EGG`)), 1000);
        });
    const cook = egg =>
        new Promise((resolve, reject) => {
            setTimeout(() => resolve((`${egg} => COOK`), 1000));
        });
    
    getHen()
        .then(getEgg)
        .then(cook)
        .then(console.log)
        .catch(console.log);
    // error! HEN => EGG

     

     

    5. Callback Promise

    class UserStorage {
        loginUser(id, password) {
            return new Promise ((resolve, reject) => {
                setTimeout(() => {
                    if (
                        (id === 'ellie' && password === 'dream') ||
                        (id === 'coder' && password === 'academy')
                    ) {
                        resolve(id);
                    } else {
                        reject(new Error('not found'));
                    }
                }, 2000);	
            });
        }
    	
        getRoles(user) {
            return new Promise ((resolve, reject) => {
                setTimeout(() => {
                    if (user === 'ellie') {
                        resolve({ name: 'ellie', 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 => alert(`Hello ${user.name}, you have a ${user.role} roles`))
        .catch(console.log);

     

     

     

     


    ※출처

    www.youtube.com/channel/UC_4u-bXaba7yrRz_6x6kb_w

    'JavaScript & TypeScript' 카테고리의 다른 글

    React - LifeCycle API  (0) 2020.11.24
    React - 시작하기  (0) 2020.11.23
    10. Callback  (0) 2020.11.15
    9. JSON  (0) 2020.11.15
    8. Array APIs  (0) 2020.11.14
킹수빈닷컴