Bu cevap promises, ECMAScript 6standardın JavaScript özelliğini kullanır . Hedef platformunuz desteklemiyorsapromises PromiseJs ile çoklu doldurun .
Vaatler, JavaScript'te eşzamansız işlemleri gerçekleştirmenin yeni (ve çok daha iyi) bir yoludur:
$('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
});
}
Bu, bu basit örnek için önemli bir ek yük gibi görünebilir, ancak daha karmaşık kodlar için geri arama kullanmaktan çok daha iyidir. Birden çok thenifadeyi kullanarak birden çok eşzamansız çağrıyı kolayca zincirleyebilirsiniz :
function1(someVariable).then(function() {
function2(someOtherVariable);
}).then(function() {
function3();
});
Ayrıca jQuery ertelemelerini kolayca ( $.ajaxaramalardan döndürülen ) sarabilirsiniz :
Promise.resolve($.ajax(...params...)).then(function(result) {
//whatever you want to do after the request
});
@Charlietfl'in belirttiği gibi, jqXHRdöndürülen nesne arabirimi $.ajax()uygular Promise. Bu yüzden bir a sarmak gerekli değildir Promise, doğrudan kullanılabilir:
$.ajax(...params...).then(function(result) {
//whatever you want to do after the request
});
function1uyumsuz işlem gerçekleştiriyor mu?