Language/JavaScript
Promise 객체
구일일구
2023. 12. 20. 10:42
반응형
Promise
비동기 작업의 최종 완료 또는 실패를 나타내는 객체
함수에 콜백을 전달하는 대신, 콜백을 첨부하는 방식
예시
더보기
1. 기존 방식
function successCallback(result) {
console.log("Audio file ready at URL: " + result);
}
function failureCallback(error) {
console.log("Error generating audio file: " + error);
}
createAudioFileAsync(audioSettings, successCallback, failureCallback);
2. Promise 반환 방식
createAudioFileAsync(audioSettings).then(successCallback, failureCallback);
3. 조금 더 간단한 방식
const promise = createAudioFileAsync(audioSettings);
promise.then(successCallback, failureCallback);
Promise의 특징
- 자바스크립트 이벤트가 현재 실행중인 콜 스택을 완료하기 이전에 절대 호출하지 않음
- 비동기 작업이 성공하거나 실패한 뒤에 then() 을 이용하여 추가한 콜백의 경우도 위와 같음
- then()을 여러번 사용하여 여러개의 콜백을 추가할 수 있음
- 각각의 콜백은 주어진 순서대로 하나하나 실행됨
Chaining
보통 두 개 이상의 비동기 작업을 순차적으로 실행해야 하는 상황
순차적으로 각각의 작업이 이전 단계 비동기 작업이 성공하고나서 결과값으로 다음 비동기 작업을 실행해야 하는 경우에
promise chain을 이용하여 해결함
const promise = doSomething();
const promise2 = promise.then(successCallback, failureCallback);
혹은
const promise2 = doSomething().then(successCallback, failureCallback);
promise2는 doSomething() 뿐만 아니라, successCallback 또는 failureCallback의 완료를 의미함
successCallback 이나 failureCallback이 promise를반환하는 비동기함수라면,
promise2에 추가된 콜백은 successCallback 이나 failureCallback에 의해 반환된 promise뒤에 대기함
반응형