Bu cevap promises
, ECMAScript 6
standardı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 then
ifadeyi 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 ( $.ajax
aramalardan 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, jqXHR
dö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
});
function1
uyumsuz işlem gerçekleştiriyor mu?