비동기콜백사용시 발생하는 콜백지옥을 대체할 방법으로 promise객체가 도입되었다.
let promise = new Promise(function(resolve, reject) {
....//생산자 비동기작업 수행코드
});
인자함수를 executer라고하며 promise객체생성시 자동으로 호출된다.
Promise객체 프로퍼티
state :
result :

let promise = new Promise(function(resolve, reject) {
....//생산자 비동기작업 수행코드
});
resolve : 비동기작업이 완료됨을 알리는 콜백
reject : 비동기작업이 실패됨을 알리는 콜백
생산자는 비동기작업 시작과함께 Promise객체를 만들어 반환한다.
promise state는 pending상태에서 fullfilled또는 rejected 로 변경될때까지 기다린다.
생산자는 비동기작업 결과에따라 resolve 또는 reject콜백을 호출한다.
promise객체가 소비자 핸들러를 호출한다.
let promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("완료"), 1000);
});
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
pending상태에있던 promise state는 1초후에 fullfilled 또는 reject상태로 변경되고 promise는 소비자 핸들러를 호출한다.
promise.then(
function(result) { /* fullfilled 핸들러 */ },
function(error) { /* reject핸들러 */ }
).catch(alert);
then핸들러에서도 발생된 error객체를 처리할 수 있지만 catch핸들러에서 처리할 수 있다.
finally핸들러는 fullfilled, reject와 상관없이 수행되는 핸들러다.
promise.finally(() => 로딩 인디케이터 중지)
.then(result => result와 err 보여줌 )