Semasa saya menggunakan JQuery, saya tahu janji itu ialah model pengaturcaraan tak segerak JS, tetapi saya tidak begitu memahami perbezaan antaranya dan objek tertunda JQuery. Semasa projek syarikat itu berkembang, kami perlu menerima data daripada bahagian belakang, jadi kami memutuskan untuk menyelesaikannya.
Janji
Promise ialah mod yang mengendalikan peristiwa tak segerak dalam bentuk proses operasi segerak, mengelakkan lapisan bersarang dan boleh mengendalikan peristiwa tak segerak dalam rantai.
Kami tahu bahawa semasa menulis kod asynchronous JavaScript, panggilan balik adalah mekanisme yang paling mudah, bagaimanapun, menggunakan mekanisme ini mesti mengorbankan aliran kawalan, pengendalian pengecualian dan semantik fungsi, malah boleh menyebabkan kami terjebak ke dalam perangkap panggilan balik janji menyelesaikan masalah ini.
Janji dalam ES6, Q terbina dalam AngularJS terbina dalam angularJS, dan apabila menerima pakai spesifikasi Promises/A, seperti berikut:
Setiap tugasan mempunyai tiga status: belum selesai, dipenuhi dan ditolak.
status 1.pending: boleh beralih kepada status pemenuhan atau penolakan.
2. Keadaan terpenuhi: Ia tidak boleh ditukar kepada mana-mana keadaan lain, dan keadaan itu mesti mempunyai nilai.
3. Keadaan ditolak: Ia tidak boleh ditukar kepada mana-mana keadaan lain, dan keadaan itu tidak boleh diubah.
Pemindahan negeri adalah sekali sahaja Setelah keadaan dipenuhi (selesai) atau gagal (gagal/ditolak), ia tidak boleh diubah lagi.
Penggunaan asas Q Promise
Kod di atas menunjukkan peranan beberapa kaedah bagi contoh tertunda yang dibina oleh $q.defer(). Jika operasi tak segerak berjaya, gunakan kaedah penyelesaian untuk menukar status objek Janji kepada "berjaya" (iaitu, daripada belum selesai kepada diselesaikan jika operasi tak segerak gagal, gunakan kaedah tolak untuk menukar status kepada "gagal"); (iaitu, daripada belum selesai kepada diselesaikan). Akhirnya, deferred.promise dikembalikan, dan kita boleh memanggil kaedah kemudian dalam rantai.
JS akan mempunyai Promise asli, ES6 sudah mempunyai objek Promise, firefox dan versi beta Chrome 32 telah melaksanakan API Promise asas
$q.defferd dalam AngularJs
Panggil $q.defferd untuk mengembalikan objek yang ditangguhkan kepada panggilan berantai. Objek ini mengaitkan tiga keadaan tugas dalam spesifikasi Promises/A melalui API.
IPU tertunda
Kaedah objek tertunda
1.resolve(value): Pada pengisytiharan resolve(), ia menunjukkan bahawa objek promise berubah daripada keadaan belum selesai untuk diselesaikan.
2.reject(reason): Pada pengisytiharan menyelesaikan(), ia menunjukkan bahawa objek janji berubah daripada keadaan belum selesai kepada ditolak.
3.notify(value): Apabila notify() diisytiharkan, ia menunjukkan keadaan objek promise yang tidak dipenuhi dan boleh dipanggil beberapa kali sebelum menyelesaikan atau menolak.
sifat objek tertunda
janji: Apa yang akhirnya dikembalikan ialah atribut janji objek tertunda yang baharu, bukan objek tertunda asal. Objek Promise baharu ini hanya boleh memerhati keadaan objek Promise asal dan tidak boleh mengubah suai keadaan dalaman objek tertunda untuk menghalang keadaan tugas daripada diubah suai secara luaran.
Promise API
Apabila kejadian tertunda dibuat, objek janji baharu dicipta dan rujukan boleh diperoleh melalui deferred.promise.
Tujuan objek janji adalah untuk membolehkan bahagian yang berminat mendapatkan hasil pelaksanaannya apabila tugas tertunda selesai.
Kaedah objek Janji
1.then(errorHandler, fulfilledHandler, progressHandler): Kaedah kemudian digunakan untuk memantau keadaan Janji yang berbeza. ErrorHandler memantau status gagal, fulfilledHandler memantau status dipenuhi dan progressHandler memantau status tidak dipenuhi (tidak lengkap). Selain itu, panggilan balik pemberitahuan boleh dipanggil sifar hingga lebih banyak kali, memberikan petunjuk kemajuan sebelum menyelesaikan atau menolak (selesaikan dan ditolak).
2.catch(errorCallback) - pintasan untuk promise.then(null, errorCallback)
3.finally(callback) - membolehkan anda melihat sama ada janji dilaksanakan atau ditolak, tetapi melakukannya tanpa mengubah nilai akhir. Ini boleh digunakan untuk melakukan beberapa kerja mengeluarkan sumber atau membersihkan objek yang tidak digunakan, tidak kira sama ada janji itu ditolak atau diselesaikan. Untuk maklumat lanjut, lihat spesifikasi dokumentasi penuh.
Panggilan berantai janji boleh dilaksanakan melalui kaedah then().
Kaedah lain $q
$q.when(value): Lulus nilai pembolehubah, promise.then() melaksanakan panggilan balik yang berjaya
$q.all(promises): Berbilang janji mesti dilaksanakan dengan jayanya sebelum panggilan balik kejayaan boleh dilaksanakan Nilai yang diluluskan ialah nilai tatasusunan atau cincangan Setiap nilai dalam tatasusunan adalah objek janji yang sepadan dengan Indeks