Jawaban ini menggunakan promises
, fitur JavaScript ECMAScript 6
standar. Jika platform target Anda tidak mendukung promises
, isi dengan PromiseJs .
Janji adalah cara baru (dan jauh lebih baik) untuk menangani operasi asinkron dalam 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
});
}
Ini mungkin tampak seperti overhead yang signifikan untuk contoh sederhana ini, tetapi untuk kode yang lebih kompleks itu jauh lebih baik daripada menggunakan panggilan balik. Anda dapat dengan mudah membuat beberapa panggilan tidak sinkron menggunakan banyak then
pernyataan:
function1(someVariable).then(function() {
function2(someOtherVariable);
}).then(function() {
function3();
});
Anda juga dapat membungkus jQuery deferrds dengan mudah (yang dikembalikan dari $.ajax
panggilan):
Promise.resolve($.ajax(...params...)).then(function(result) {
//whatever you want to do after the request
});
Seperti @charlietfl catat, jqXHR
objek dikembalikan dengan $.ajax()
mengimplementasikan Promise
antarmuka. Jadi sebenarnya tidak perlu untuk membungkusnya Promise
, itu dapat digunakan langsung:
$.ajax(...params...).then(function(result) {
//whatever you want to do after the request
});
function1
melakukan operasi async?