let promise = new Promise(function(resolve, reject) {
// executor
});
new Promise에 전달되는 함수를 excutor이라고 부름
excutor은 new Promise가 만들어질 때 자동으로 실행
resolve와 reject는 자바스크립트에서 자체 제공하는 콜백
- resolve(value) : 일이 성공적으로 끝난 경우 그 결과를 나타내는 value와 함께 호출
excutor은 자동으로 실행되는데 , 처리가 끝나면 executor 처리 성공 여부에 따라 resolve나 rejuect를 호출
let promise = new Promise(function(resolve, reject) {
// 프라미스가 만들어지면 executor 함수는 자동으로 실행됩니다.
// 1초 뒤에 일이 성공적으로 끝났다는 신호가 전달되면서 result는 'done'이 됩니다.
setTimeout(() => resolve("done"), 1000);
});
new Promise
에 의해 자동으로 즉각적으로 호출됨excutor 처리가 시작 된 지 1초 후, resolve("done")이 호출되고 결과가 만들어짐, promise객체는 위와 같이 변함
이행혹은 거부 상태의 프라미스, 반대되는 프라미스로 대기 상태의 프라미스가 있음
프라미스 객체는 executor 결과나 에러를 받을 소비함수를 이어주는 역할을 함
소비함수는 .then .catch .finally 메서드를 사용해 등록됨
promise.then(
function(result) { /* 결과(result)를 다룹니다 */ },
function(error) { /* 에러(error)를 다룹니다 */ }
);
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
// .catch(f)는 promise.then(null, f)과 동일하게 작동합니다
promise.catch(alert); // 1초 뒤 "Error: 에러 발생!" 출력
프라미스가 처리되면(이행이나 거부) f가 항상 실행된다는 점에서 .then(f, f)와 유사
new Promise((resolve, reject) => {
/* 시간이 걸리는 어떤 일을 수행하고, 그 후 resolve, reject를 호출함 */
})
// 성공·실패 여부와 상관없이 프라미스가 처리되면 실행됨
.finally(() => 로딩 인디케이터 중지)
.then(result => result와 err 보여줌 => error 보여줌)