A Promise is an object representing the eventual completion or failure of an asynchronous operation.
promise 는 비동기 작업의 최종 성공 또는 실패를 표현하는 객체이다.
cf> 비동기 작업
javascript 는 코드가 A->B->C 순으로 쓰여져 있을 때 차례대로 A->B->C 를 실행하기는 하지만
A 가 끝날때 까지 B가 실행되지 않지는 않는다.
즉 javascript 는 태스크가 종료되지 않은 상태라 하더라도 대기하지 않고 다음 태스크를 실행한다.
하지만 이렇게 되면 A 에서 연산한 결과를 B 에서 사용하는 로직일 때 큰 문제가 된다.
function getData() {
return new Promise(function(resolve, reject) {
const data = 100;
resolve(data);
});
}
// resolve()의 결과 값 data를 resolvedData로 받음
getData().then(function(resolvedData) {
console.log(resolvedData); // 100
});
function getData() {
return new Promise(function(resolve, reject) {
reject(new Error("Request is failed"));
});
}
// reject()의 결과 값 Error를 err에 받음
getData().then().catch(function(err) {
console.log(err); // Error: Request is failed
});
function 앞에 async 를 붙이면 해당함수는 항상 promise 를 반환한다.
promise 가 아닌 값을 반환하더라고 resolved promise 를 반환한다.
await 키워드를 사용하는 대상이 promise 가 아닌 경우 자동으로 Promise.resolve()의 값을 반환
=> 즉 promise 가 아니더라도 await 을 사용해 동기로 작업을 할 수 있다.
async function foo() {
return "foo"
}
foo().then((value)=>alert(value)); // foo