Interaksi halaman web menjadi semakin kompleks, dan JavaScript juga menjadi lebih dan lebih banyak operasi yang tidak sinkron. Misalnya, permintaan AJAX yang umum membutuhkan respons terhadap operasi ketika permintaan selesai. Permintaan biasanya asinkron. Selama proses permintaan, pengguna dapat melakukan operasi lain tanpa memblokir halaman. Efek interaksi asinkron ini cukup ramah kepada pengguna. Tetapi bagi pengembang, sangat tidak ramah untuk menangani operasi semacam ini dalam jumlah besar. Operasi yang diselesaikan oleh permintaan asinkron harus ditentukan sebelumnya dalam fungsi callback, dan fungsi ini harus dipanggil setelah permintaan selesai. Metode pemrograman asinkron nonlinier ini akan membuat pengembang tidak nyaman, dan juga membawa banyak ketidaknyamanan, meningkatkan kopling dan kompleksitas kode, dan organisasi kode akan sangat tidak masuk akal, sangat mengurangi pemeliharaan kode. Situasinya lebih rumit. Jika suatu operasi harus menunggu sampai beberapa permintaan AJAX asinkron selesai sebelum dapat dilakukan, fungsi callback akan bersarang. Jika beberapa lapisan perlu bersarang, Anda hanya dapat meminta berkah.
Mari kita lihat fungsi asinkron umum berikut.
Salinan kode adalah sebagai berikut:
var showmsg = function () {
setTimeout (function () {
waspada ('halo');
}, 5000);
};
Ini biasanya dilakukan jika Anda ingin menambahkan panggilan balik ke fungsi.
Salinan kode adalah sebagai berikut:
var showmsg = function (callback) {
setTimeout (function () {
waspada ('halo');
// Tambahkan panggilan balik di sini
callback ();
}, 5000);
};
Jika Anda menggunakan Easy.js Promise, metode menambahkan callback akan jauh lebih elegan, selama Anda perlu merangkum fungsi asli menjadi contoh janji.
Salinan kode adalah sebagai berikut:
var showmsg = function () {
// Bangun contoh janji
var janji = e.promise baru ();
setTimeout (function () {
waspada ('halo');
// Ubah keadaan janji
janji.resolve ('selesai');
}, 5000);
// Kembali ke Instance Promise
janji kembali;
};
Ada 3 langkah kunci untuk merangkum fungsi biasa menjadi contoh janji. Langkah pertama adalah membangun instance janji di dalam fungsi. Langkah kedua adalah mengubah keadaan janji yang akan diselesaikan setelah fungsi penempatan dieksekusi. Langkah ketiga adalah mengembalikan instance janji ini. Setiap contoh janji memiliki 3 negara bagian, yaitu tertunda (tidak selesai), diselesaikan (selesai, berhasil), dan ditolak (ditolak, gagal). Mari kita lihat cara menambahkan panggilan balik.
Salinan kode adalah sebagai berikut:
showmsg (). Kemudian (function (str) {
// panggilan balik ditambahkan di sini
callback (str);
});
Ini sepenuhnya memisahkan fungsi panggilan balik dari fungsi asinkron asli, dan dari perspektif organisasi kode, jauh lebih elegan. Resolve menerima parameter yang dapat dengan mudah mentransfer data ke panggilan balik yang ditambahkan menggunakan metode kemudian.
Untuk permintaan AJAX, Easy.js secara langsung merangkum metode AJAX menjadi objek janji, dan Anda dapat secara langsung menambahkan metode kemudian untuk menelepon kembali.
Salinan kode adalah sebagai berikut:
E.Ajax ({
URL: 'test1.php',
Ketik: 'Dapatkan'
})
.then (function () {
// Tambahkan panggilan balik dengan permintaan yang berhasil
}, fungsi(){
// Tambahkan panggilan balik yang gagal permintaan
});
Metode kemudian menerima 2 fungsi sebagai parameter. Fungsi pertama adalah panggilan balik yang lengkap, dan yang kedua adalah panggilan balik yang gagal.
Bagaimana jika ada beberapa permintaan AJAX yang disebutkan di atas? Maka Anda harus menggunakan metode saat. Metode ini dapat menerima beberapa instance janji sebagai parameter.
Salinan kode adalah sebagai berikut:
var requests = e.when (e.Ajax ({
URL: 'test1.php',
Ketik: 'Dapatkan'
}), E.Ajax ({
URL: 'test2.php',
Ketik: 'Dapatkan'
}));
requests.then (function (arg1, arg2) {
Console.log ('Sukses:' + arg1 [0] + arg2 [0]);
}, function (arg1, arg2) {
console.log ('kegagalan:' + arg1 + arg2);
});
Metode When adalah untuk menyimpan beberapa instance janji ke dalam array, dan tunggu sampai semua contoh array janji selesai sebelum menjalankan panggilan balik yang sudah selesai. Setelah contoh ditolak, panggilan balik yang ditolak segera dieksekusi.
Pola janji adalah salah satu spesifikasi CommonJS. Banyak perpustakaan JavaScript utama memiliki implementasi yang sesuai, seperti jQuery dan dojo, yang telah ditunda untuk mengimplementasikan fungsi -fungsi ini. Di sini saya masih ingin mengeluh tentang JQuery ditangguhkan. Mengesampingkan penggunaan internal, ini harus menjadi modul dengan tingkat penggunaan pengguna terendah, yang memiliki hubungan tertentu dengan metode penggunaannya yang lebih kompleks.