Promise
Javascript Promise
자바스크립트에서 비동기 처리시 사용하는 프로미스를 알아본다. 자바스크립트에서 비동기 처리 로직을 프로미스를 이용해 콜백패턴대신 쉽게 패턴화해서 구현할 수 있다.
프로미스 API 기본 사용법
프로미스 생성자를 이용하여 프로미스 객체생성
const promise = new Promise((resolve, reject) => {
// 비동기 처리
// 처리가 끝나면 resolve, reject을 호출
});
처리가 성공 or 실패가 되면 promise 객체의 then, catch 메서드의 콜백함수로 등록한 함수가 호출된다. 간단한 예제를 살펴보자.
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('타임아웃');
// reject('실패');
}, 1000);
});
promise.then((value) => {
console.log(value); //타임아웃
}).catch((error)=>{
console.log(error); //실패
});
성공했을때 resolve 인자로 전달된 값이 promise.then 콜백함수 인자로 전달된다. 실패했을때 reject 인자로 전달하면 catch 콜백함수가 호출된다.
프로미스 상태
프로미스 객체를 새성하면 세가지 상태가 있다.
Fulfilled : 성공
Rejected : 실패
Pending : 성공, 실패 전 초기상태
pending 상태로 시작해서 Fulfilled나 Rejected 상태로 끝난다. 고로 promise.then 메서드는 상태가 끝날때 호출될 콜백함수를 등록하는 메서드이다.
프로미스 여러개를 한번에 실행하기 Promise.all
function timerPromisefy(delay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(delay);
}, delay);
});
}
var startDate = Date.now();
Promise.all([
timerPromisefy(1),
timerPromisefy(32),
timerPromisefy(64),
timerPromisefy(128)
]).then(function (values) {
console.log(Date.now() - startDate + 'ms'); // 총 128ms
console.log(values); // [1,32,64,128]
});
Promise.all 메서드 인자로 배열프로미스를 넣어준다. 다른 프로미스와 같이 then 메서드로 값을 받을 수 있으며 all메서드로 전달된 배열 순서대로 값을 전달해 준다.
동시에 프로미스를 실행하기 때문에 가장 오래걸리는 프로미스가 완료되야 then 메서드가 실행된다.
Last updated
Was this helpful?