이 답변은 표준 promises
의 JavaScript 기능인을 사용합니다 ECMAScript 6
. 대상 플랫폼이 지원하지 않으면 promises
PromiseJs로 폴리 필하십시오 .
약속은 JavaScript에서 비동기 작업을 처리하는 새롭고 훨씬 나은 방법입니다.
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable).then(function() {
//this function is executed after function1
function2(someOtherVariable);
});
}
else {
doThis(someVariable);
}
});
function function1(param, callback) {
return new Promise(function (fulfill, reject){
//do stuff
fulfill(result); //if the action succeeded
reject(error); //if the action did not succeed
});
}
이 간단한 예제에서는 상당한 오버 헤드처럼 보일 수 있지만 복잡한 코드의 경우 콜백을 사용하는 것보다 훨씬 낫습니다. 여러 then
명령문을 사용하여 여러 비동기 호출을 쉽게 연결할 수 있습니다 .
function1(someVariable).then(function() {
function2(someOtherVariable);
}).then(function() {
function3();
});
또한 jQuery 지연을 쉽게 랩핑하여 $.ajax
호출 에서 리턴 할 수 있습니다 .
Promise.resolve($.ajax(...params...)).then(function(result) {
//whatever you want to do after the request
});
@charlietfl이 지적했듯이,에 jqXHR
의해 반환 된 객체 $.ajax()
는 Promise
인터페이스 를 구현합니다 . 실제로 실제로 랩핑 할 필요는 없으며 Promise
직접 사용할 수 있습니다.
$.ajax(...params...).then(function(result) {
//whatever you want to do after the request
});
function1
비동기 동작을 수행?