콜백함수는 다른 함수에 매개변수로 넘겨준 함수이다. 매개변수로 넘겨받은 함수는 일단 넘겨받고, 떄가 되면 나중에 call back 한다.
쉽게 말해 다른 함수가 실행을 끝낸 뒤 실행되는 함수이다.
비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.
promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체이다. 기본적으로 함수에 콜백을 전달하는 대신에 콜백을 첨부하는 방식의 객체이다.
가장 큰 장점 => Chaining
여러개의 비동기 작업을 순차적으로 실행해야 하는 상황에서 (하나의 결과로 다음 비동기 작업 실행) promise chain으로 해결한다.
각각의 primise는 체인 안에서 서로 다른 비동기 단계의 완료를 나타낸다.
고전적으로 여러 비동기 작업을 연속적으로 수행하면 다음같은 콜백 피라미드가 만들어졌다.
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doThirdThing(newResult, function(finalResult) {
console.log('Got the final result: ' + finalResult);
}, failureCallback);
}, failureCallback);
}, failureCallback);
이를 promise 체인으로 쉽게 구현할 수 있다.
doSomething().then(function(result) {
return doSomethingElse(result);
})
.then(function(newResult) {
return doThirdThing(newResult);
})
.then(function(finalResult) {
console.log('Got the final result: ' + finalResult);
})
.catch(failureCallback);
내부에서 비동기 상황이 종료되었을때 resolve함수를 호출한다.(작업이 끝날 때)
내부에서 오류상황이 일어났을 때 reject함수를 호출한다.
.then()을 이용해 비동기 작업 이후 실행할 작업을 작성한다.
chain에서 작업이 실패한 후에도 새로운 작업을 수행하는 것이 가능하다.
chain중에서 실패시 catch로 잡을 수 있다.