비동기 처리를 간편하게 할 수 있도록 도와주는 객체이다.
명령한 기능이 정상적으로 작동되면 해당 데이터를 넘겨주며
오류가 발생할 경우 해당 오류를 잡을 수 있도록 도와준다.
프로미스에는 3가지 상태가 존재한다.
const promise = new Promise(resolve, reject) => {
console.log('doing something...')
resolve('pangho')
// reject(new Error('no network'));
}
new Promise()를 통해 생성한 promise인스턴스에는
다음과같은 메소드들이 들어있다.
all()
iterable한 요소를 받아 그 요소에
promise함수의 결과를 모두 받아 올때 까지 기다렸다가
값을 모두 받으면 출력한다.
이 때 프로미스중 하나라도 거부될 경우 에러를 반환한다
race()
가장 먼저(빨리) 처리된 프로미스의 결과(또는 에러)를 출력한다.
결과가 출력됐을때 다른 에러나 프로미스 함수의 결과는 무시됩니다.
resolve()
프로미스함수가 제대로 실행됐다면 그 결과(데이터)를 전달하는 함수
reject()
프로미스 함수가 실행 중에 어떤 문제가 발생했을 때 호출되는 함수
(프로미스 함수를 만든다)
then()
프로미스 함수가 성공적으로 실행되면
그 실행값을 인자로 받아 다음 명령을 수행하는 메소드
여기서 주의할 점은 값을 바로 전달해도 되고
프로미스를 전달해도 된다.
catch()
프로미스 함수가 실패했을 경우 reject()
에서 값을 받아와 출력하는 메소드 .then(null,f)
와 값이 똑같다.
finally()
프로미스 함수의 성공 실패에 관계없이 제일 마지막에 호출되는 메소드
결과가 어떻든 마무리를 해야될 때 사용한다.
finally()
는 프로미스 결과를 처리하기 위해 만들어 진 게 아니며
프로미스 결과는 finally를 통과해서 전달된다.
이런 특징은 아주 유용하게 사용되기도 한다.
프로미스를 좀더 편하게 작성할 수 있는 방법
async function f() {
return 1;
}
함수 앞에 async
를 붙여주면 async
함수가 된다
이 함수는 항상 프로미스를 반환하게 된다.
프로미스가 아닌 값을 반환하더라도
이행 상태의 프로미스(resolved promise)로 값을 감싸
이행된 프로미스가 반환되도록 한다.
let value = await promise;
await
는 async
함수 내에서만 작동하는 키워드이다.
자바스크립트는 await
키워드를 만나면
프로미스가 처리될 때까지 함수 실행을 기다리게 만든다.
프로미스가 처리되면 그 결과와 함께 실행이 재개된다.
처리되길 기다리는 동안엔 엔진이 다른 일
(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에,
CPU 리소스가 낭비되지 않는다.