약속은 콜백이 아닙니다. 약속은 비동기 작업 의 미래 결과를 나타냅니다 . 물론, 당신이하는 방식으로 글을 쓰면 거의 혜택을 얻지 못합니다. 그러나 사용하려는 방식으로 작성하면 동기 코드와 유사한 방식으로 비동기 코드를 작성할 수 있으며 훨씬 더 쉽게 수행 할 수 있습니다.
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
});
확실히 적은 코드는 아니지만 훨씬 더 읽기 쉽습니다.
그러나 이것은 끝이 아닙니다. 진정한 이점을 발견합시다 : 어떤 단계에서 오류를 확인하려면 어떻게해야합니까? 콜백으로 그것을하는 것은 지옥 일 것이지만 약속으로 케이크 한 조각입니다.
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
}).catch(function(error) {
//handle any error that may occur before this point
});
try { ... } catch
블록 과 거의 동일합니다 .
더 나은 :
api().then(function(result){
return api2();
}).then(function(result2){
return api3();
}).then(function(result3){
// do work
}).catch(function(error) {
//handle any error that may occur before this point
}).then(function() {
//do something whether there was an error or not
//like hiding an spinner if you were performing an AJAX request.
});
그리고 더 나은 : 그 3 호출하는 경우에는 어떻게 api
, api2
, api3
동시에 실행할 수 있습니다 (예를 들어, 그들은 AJAX 호출 인 경우) 그러나 당신이 세 가지를 기다릴 필요? 약속 없이는 일종의 카운터를 만들어야합니다. 약속과 함께 ES6 표기법을 사용하는 또 다른 케이크 조각이며 매우 깔끔합니다.
Promise.all([api(), api2(), api3()]).then(function(result) {
//do work. result is an array contains the values of the three fulfilled promises.
}).catch(function(error) {
//handle the error. At least one of the promises rejected.
});
당신이 지금 새로운 관점에서 약속을 볼 수 있기를 바랍니다.