all
여러 Promise 객체의 작업 성공 결과를 기다렸다가 모두 한 번에 취합하기 위해서 사용(하나의 Promise 객체라도 rejected 상태가 되면 전체 작업이 실패한 것으로 간주)
any
여러 Promise 객체들 중 가장 먼저 fulfilled 상태가 된 Promise 객체의 상태와 결과를 반환(모든 Promise가 rejected 되면 AggregateError라는 에러를 작업 실패 정보로 갖고 rejected 상태가 됨)
race
가장 먼저 fulfilled 상태 또는 rejected 상태가 된Promise 객체와 동일한 상태와 결과를 반환
allSettled
배열 내의 모든 Promise 객체가 fulfilled 또는 rejected 상태가 되기까지 기다리고 pending 상태의 객체가 하나도 없을 때 전체 상태값을 fulfilled시키고 작업 결과를 반환
setTimeout(() => {
console.log('asynchronously executed');
}, 2000);
button.addEventListener('click', (event) => { console.log('You Clicked'); });
콜백 헬을 야기함.
function readFile_promisified(filename) {
const p = new Promise((resolve, reject) => {
fs.readFile(filename, 'utf8', (error, data) => {
if (error) {
reject(error); // 에러 발생 시 -> rejected
} else {
resolve(data); // 파일 내용 읽기 완료 -> fulfilled
}
});
});
return p;
}
try, catch, finally 사용 가능. 한 번 fulfilled/reject 상태가 되고나면 그 상태와 결과가 다시는 바뀌지 않음.
async function fetchAndPrint() {
try {
const response = await fetch('https://www.google.www');
const result = await response.text();
console.log(result);
} catch(error) {
console.log(error);
} finally {
console.log('exit');
}
}
fetchAndPrint();
async 함수 안의 내용이 순차적으로 실행되다가도, await 문을 만나면 await 바로 뒤의 코드를 실행해두고 일단 함수 바깥으로 코드 흐름을 변경. await는 async 함수 안에서만 사용할 수 있고, 코드의 top-level에서는 사용될 수 없음.