Hello World...

es6 promise 예제 만들어보기 본문

javascript

es6 promise 예제 만들어보기

FaustK 2020. 2. 4. 00:42

비동기 처리를 하는데 있어 callback 이 자주 사용되었으나 콜백헬 등 가독성이 안 좋아지고 코드가 난잡해지는 경우가 있다.

 

callback

const wait = (inputStr, callback) => {
  setTimeout(() => {
    console.log(inputStr);
    callback();
  }, 500);
};

wait('A', () => {
  wait('B', () => {
    wait('C', () => {
      return;
    });
  });
});

// A -> B -> C 

 

promise

const wait = inputStr => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(inputStr);
      resolve();
    }, 500);
  });
};

wait('A')
  .then(() => wait('B'))
  .then(() => wait('C'));

// A -> B -> C 

 

promise 비동기 처리 하는 데 있어 매우 중요한 개념이므로 잘 기억해두자.

new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(100);
  }, 500);
})
  .then(res1 => {
    console.log('res1', res1);  // 100
    return res1 + 100;
  })
  .then(res2 => {
    console.log('res2', res2);  // 200
    return res2 + 200;
  })
  .then(res3 => console.log('res3', res3)); // 400

res1 → res2→ res3 순서대로 잘 처리가 되는 것을 알 수 있다.

 

 

 

const promi = new Promise((resolve, reject) => {
	resolve(2);
});

// typeof promi === 'object'

const timeTwo = num => num * 2;

promi
	.then(timeTwo) // 4
	.then(timeTwo) // 8
	.then(result => console.log(result)) // 8
	.then(test => console.log(test)) // undefined
	.catch(err => console.log(err));

자바스크립트는 기본적으로 함수의 리턴값이 없으면, undefined 를 반환한다.

 

catch

const promi = new Promise((resolve, reject) => {
	resolve(2);
});

const timeTwo = num => num * 2;

promi
	.then(timeTwo) // 4
	.then(timeTwo) // 8
	.then(result => console.log(result)) // 8
	.then(test => console.log(test)) // undefined
	.then(() => {
		throw Error('Something Error');
	})
	.catch(err => console.log(err));

/*
8
undefined
Error: Something Error
*/


const promi2 = new Promise((resolve, reject) => {
	setTimeout(resolve, 1000, 'hahaha');
});
const promi3 = new Promise((resolve, reject) => {
	setTimeout(resolve, 3000, 'promi3~');
});
const promi1 = Promise.resolve(3);

// 2 -> 3 -> 1
promi2
	.then(result => console.log(result))
	.then(() => promi3)
	.then(result => console.log(result))
	.then(() => promi1)
	.then(result => console.log(result))
	.catch(err => console.log(err));

/*
hahaha
promi3~
3
*/

Promise.all

const promi2 = new Promise((resolve, reject) => {
	setTimeout(resolve, 1000, 'hahaha');
});
const promi3 = new Promise((resolve, reject) => {
	setTimeout(resolve, 3000, 'promi3~');
});
const promi1 = Promise.resolve(3);

// 총 4초 후 결과 반환
// 2 -> 3 -> 1
Promise.all([promi2, promi3, promi1]).then(result => {
	console.log(result);
});

//[ 'hahaha', 'promi3~', 3 ]

 

추가

const promi1 = new Promise((resolve, reject) => {
  resolve('promi1~');
});

const promi2 = new Promise((resolve, reject) => {
  resolve('promi2~');
});

const promi3 = new Promise((resolve, reject) => {
  resolve('promi3~');
  // reject('reject @.@');
});

Promise.all([promi2, promi1, promi3])
  .then(r => console.log(r))
  .catch(err => {
    console.log(err);
  });

// [ 'promi2~', 'promi1~', 'promi3~' ]

 

Promise.race

const promi2 = new Promise((resolve, reject) => {
	setTimeout(resolve, 1000, 'hahaha');
});
const promi3 = new Promise((resolve, reject) => {
	setTimeout(reject, 3000, 'promi3~');
});

Promise.race([promi2, promi3]).then(val => {
	console.log(val);
});
// 1초후 hahaha 출력, 

 

 

헷갈리는 것 추가

new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('A');
  }, 500);
})
  .then(r => {
    console.log(r);
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('B');
      }, 100);
    });
  })
  .then(r => {
    console.log(r);
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('C');
      }, 50);
    });
  })
  .then(r => console.log(r));


A
B
C

'javascript' 카테고리의 다른 글

html, css, javascript 모달창 만들기  (0) 2020.05.13
javaScript Promise 헷갈리는 점 추가  (0) 2020.02.05
replaceAll method 만들기  (0) 2020.01.16
encodeURIComponent  (0) 2020.01.14
Object.create(obj) 와 new 차이?  (0) 2020.01.11
Comments