Pekerjaan saya sedikit lebih mudah. Saya ingat sebuah kata janji yang selalu saya lihat sebelumnya, jadi saya pergi untuk mempelajarinya dengan sabar.
1: Apa itu janji? Mengapa hal ini ada di sana?
Pertama -tama, Promise dibuat untuk menyelesaikan masalah penulisan kode selama pemrograman JavaScript asinkron.
Dengan pengembangan JavaScript, ada semakin banyak skenario yang tidak sinkron. Ujung depan memiliki Ajax, SetTimeout, dll., Dan node backend asinkron. Menurut praktik tradisional, itu untuk menanamkan panggilan balik dalam berbagai panggilan balik. Kode dapat membuat orang pusing.
Pada saat ini, komunitas CommonJS mengusulkan spesifikasi yang disebut Promise/A+, yang mendefinisikan cara menulis kode asinkron, termasuk menggunakan When/Then/Resolve, dll. Untuk mengatur kode asinkron.
Karena spesifikasi ini sangat elegan, banyak orang telah menerapkan spesifikasi ini satu demi satu, termasuk Browser Native Support Promise (), ditangguhkan di jQuery, when.js, dll.
Karena perpustakaan ini memenuhi spesifikasi ini, pelajari saja satu. Saya terutama belajar ditangguhkan dari jQuery, jadi artikel ini terutama berbicara tentang implementasi ini.
Dua: JQuery ditangguhkan
Pertama -tama, tentang objek yang ditangguhkan, Tn. Ruan Yifeng menulis artikel secara detail, silakan klik di sini. Dianjurkan agar Anda membaca artikelnya terlebih dahulu dan kemudian melanjutkan membaca.
Seperti disebutkan di atas, janji dirancang untuk memecahkan asinkron (seperti AJAX), jadi mari kita bandingkan perbedaannya.
JQuery Ajax klasik ditulis sebagai
Salinan kode adalah sebagai berikut:
$ .Ajax ({
Ketik: "Dapatkan",
URL: "",
Sukses: function () {},
kesalahan; fungsi () {}
});
Parameter keberhasilan dan kesalahan adalah fungsi panggilan balik saat keberhasilan/kegagalan.
Sekarang metode penulisan Ajax JQuery telah menjadi
Salinan kode adalah sebagai berikut:
$ .Ajax ({
jenis; "mendapatkan",
URL: ""
}). Done (function () {}). Fail (function () {});
Setelah sukses, fungsi yang dilakukan akan dipanggil, dan jika fungsi dalam gagal dipanggil, fungsi dalam gagal akan dipanggil.
Setelah melihat ini, Anda mungkin memiliki pertanyaan, objek mana metode ini dilakukan/gagal? Objek apa yang dikembalikan $ .Ajax () dan mengapa ada dua metode ini?
Jawabannya ada di objek yang ditangguhkan yang diperkenalkan di bawah ini.
jQuery menyediakan jenis baru yang ditangguhkan. Menghasilkan dengan $ .deferred (). Misalnya
Salinan kode adalah sebagai berikut:
var def = $ .deferred ();
DEF ini mewarisi banyak metode, termasuk dilakukan/gagal/menyelesaikan/menolak, dll.
Jadi di sini kita tahu bahwa di atas $ .AJAX () sebenarnya mengembalikan objek ini.
Ada banyak metode untuk objek yang ditangguhkan. Berikut adalah beberapa yang umum digunakan. Untuk informasi lebih lanjut, silakan merujuk ke API.
Hal pertama adalah secara alami menghasilkan objek def. Ada banyak cara di sini, seperti:
Salinan kode adalah sebagai berikut:
var def = $ .deferred (); // Hasilkan sendiri
$ .Ajax ({}); // Metode AJAX juga mengembalikan objek def
$. WHEN (); // Saat metode juga akan mengembalikan objek def
Di sini, $. WHEN () dapat dibicarakan secara terpisah. Metode ini biasanya menerima satu atau lebih objek yang ditangguhkan, dan kemudian menentukan status objek yang dikembalikan oleh $ .shen () berdasarkan status objek yang ditangguhkan ini. Salah satu skenario penggunaan adalah beberapa permintaan AJAX. Jika salah satu dari mereka gagal, itu dianggap gagal. Kemudian Anda dapat melewati beberapa metode AJAX ke $ .shen (), seperti $. WHEN ($. AJAX (), $ .AJAX ()). Kemudian $ .Ketika akan mengembalikan objek def (dinilai berdasarkan hasil dari dua permintaan ini).
Kemudian Anda mendapatkan objek DEF, dan ada serangkaian metode untuk mengubah keadaan objek ini.
Salinan kode adalah sebagai berikut:
def.resolve (); // Atur objek DEF yang akan diselesaikan, dan kemudian fungsi terikat ke def.done () akan segera dieksekusi.
def.reject (); // Atur objek def untuk gagal, dan kemudian fungsi terikat ke def.fail () akan segera dieksekusi.
def.notify (); // Selama pelaksanaan objek DEF, panggilan balik yang sesuai adalah def.progress ().
Berikutnya adalah metode pengaturan panggilan balik, pesanan sesuai dengan yang di atas, yaitu, negara apa yang akan memanggil panggilan balik apa
Salinan kode adalah sebagai berikut:
def.done (); // sesuai dengan def.resolve ();
def.fail (); // sesuai dengan def.reject ();
def.progress (); // sesuai dengan def.notify ();
// Spesial
def.always (); // menelepon jika berhasil atau gagal
def.then (); // Terima beberapa fungsi, dalam urutan, keberhasilan, kegagalan, dan kemajuan
Bahkan, pada titik ini, penggunaan objek yang ditangguhkan hampir sama. Namun, jQuery juga menyediakan beberapa API
Salinan kode adalah sebagai berikut:
// periksa kelas status saat ini
def.isrejected ();
def.isresolved ();
def.state ();
Seperti namanya, API ini tidak akan dibahas secara rinci. Untuk detailnya, Anda dapat memeriksa dokumentasi API JQI yang diberikan di atas.
Ada metode lain, yaitu bahwa kadang -kadang kita ingin memberikan objek def eksternal, dan kemudian objek ini dapat menetapkan panggilan balik untuk berbagai negara, tetapi tidak dapat mengubah keadaannya, sehingga kita dapat menggunakannya.
Salinan kode adalah sebagai berikut:
def.promise ();
Kembalikan objek janji, yang merupakan subset dari objek yang ditangguhkan. Anda dapat menggunakan metode selesai/gagal dan lainnya, tanpa menyelesaikan/menolak dan metode lainnya. Ini terutama untuk melindungi keadaan objek def agar tidak dimodifikasi dari luar.
Pada titik ini, semua janji telah dibahas. Anda sekarang dapat menggunakannya dalam proyek Anda. Selain itu, saya berharap Anda mendapatkan tahun -tahun awal yang bahagia sebelumnya. Saya berharap Anda semua tahun yang bahagia dari domba ^^.