
공식페이지에서는 다음과 같이 설명한다.
Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.
성공(resolve) 또는 실패(reject)의 상태를 나타낸다.then(), 실패시 catch() 함수가 실행된다.finally() 함수가 실행된다.콜백함수보다 좋은 점이 있다.
catch를 사용하여 특정 코드를 실행할 수 있다.new Promise() 문법으로 myPromise라는 변수 오브젝트를 생성하면 된다. 변수 이름은 자유롭게 작명할 수 있다.
var myPromise = new Promise();
new Promise()안에 콜백함수를 추가하면 성공/실패 상태를 나타낼 수 있다.
var myPromise = new Promise(function (resolve, reject) {
resolve(); // 성공
});
myPromise.then(() => { console.log("성공!"); }).catch(() => { console.log("실패!"); });
콘솔창

resolve() 사용시 then()함수가 실행된다.var myPromise = new Promise(function (resolve, reject) {
reject(); // 실패
});
myPromise.then(() => { console.log("성공!"); }).catch(() => { console.log("실패!"); });
콘솔창

reject() 사용시 catch()함수가 실행된다.이미지 로드 성공시 이미지 로드 성공!을 출력하고 로드 실패시 이미지 로드 실패!를 출력해보자.
이미지 로딩의 성공/실패는 이벤트리스너의 load, error를 통해 가능하다.
<body>
<img
id="img"
src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/220px-Google_2015_logo.svg.png"
width="100px"
/>
<script>
var myPromise = new Promise((resolve, reject) => {
let img = document.getElementById("img");
img.addEventListener("load", () => {
resolve(); // 로드 성공시 resolve() 실행
});
img.addEventListener("error", () => {
reject(); // 로드 실패시 reject() 실행
});
});
myPromise
.then(() => {
console.log("이미지 로드 성공!");
})
.catch("이미지 로드 실패!");
</script>
</body>
결과

이미지가 성공적으로 로딩되고 then()이 실행되었다.