Mari kita bicara tentang apa janji itu dan apa $ Q adalah yang pertama. Promise adalah mode pemrosesan yang asinkron, dengan banyak metode implementasi, seperti Q dan JQuery yang terkenal di Kris Kwal.
Apa janji
Mereka yang telah belajar tentang Ajax sebelumnya dapat mengalami rasa sakit dari callbacks. Kode sinkron mudah untuk debug, tetapi kode panggilan balik asinkron akan menyebabkan pengembang jatuh ke dalam rawa dan tidak dapat dilacak, seperti:
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})}))Nesting itu sendiri sudah sulit dipahami, dan di samping itu, panggilan balik akan dipicu dalam beberapa waktu yang tidak diketahui, yang setara dengan menambah penghinaan terhadap cedera.
Namun, dengan spesifikasi janji, ini dapat membantu pengembang menulis kode asinkron dengan cara yang sinkron, seperti di AngularJS:
deferabc.resolve (xxx)
.then (funcsuccess () {}, funceRror () {}, funcnotify () {});
Ketika objek dalam Resolve berhasil dieksekusi, fungsi akan dipicu, dan jika gagal, fungsi akan dipicu. Sedikit mirip
deferabc.resolve (function () {sunccess: funcsuccess, error: funceRror, notify: funcnotify})Terus terang, janji adalah pra-definisi hasil eksekusi yang tidak pasti. Jika berhasil, itu akan menjadi xxxx; Jika gagal, itu akan menjadi xxxx, seperti memberikan beberapa janji terlebih dahulu.
Misalnya, Xiaobai sangat malas ketika dia masih di sekolah. Dia selalu meminta teman sekamarnya untuk membawa makanan dan mengatakan kepadanya sebelumnya bahwa jika ada daun bawang dan telur, dia akan membeli sayuran ini, kalau tidak dia akan membeli telur goreng dengan tomat; Tidak masalah jika dia bisa membelinya, dia harus ingat untuk membawa sebungkus rokok.
Xiaobai meminta teman sekamarnya untuk membawa makanan ()
.then (telur leek, telur orak dengan tomat)
. Akhirnya (dengan paket rokok)
Layanan $ Q.
Layanan Q adalah implementasi janji yang diimplementasikan dengan sendirinya di AngularJS, yang jauh lebih ringan dari Q. Kris Kwal's Q.
Biarkan saya pertama kali memperkenalkan beberapa metode yang umum digunakan dari $ T:
Defer () membuat objek yang ditangguhkan, yang dapat menjalankan beberapa metode yang umum digunakan, seperti tekad, tolak, beri tahu, dll.
all () melewati array janji, dieksekusi dalam batch, dan mengembalikan objek janji
Ketika () lulus dalam parameter yang tidak pasti, jika memenuhi standar janji, ia mengembalikan objek janji.
Dalam janji, tiga negara didefinisikan: keadaan menunggu, keadaan penyelesaian, dan keadaan penolakan.
Ada beberapa peraturan tentang status:
1 Perubahan negara tidak dapat diubah
2 Keadaan menunggu bisa menjadi lengkap atau ditolak
Metode Dist ()
Dalam $ Q, Anda dapat menggunakan metode Resolve untuk menjadi status penyelesaian; Gunakan metode tolak untuk menjadi negara tolak.
Mari kita lihat penggunaan sederhana $ T:
<html ng-app = "myApp"> <adap> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <skrip src = "http:/apps.bdimg.com/libs/angular.js/1.2.16/angular. ng-controller = "myctrl"> {{test}} </div> <script type = "text/javascript"> var myappmodule = angular.module ("myapp", []); myAppModule.controller ("myctrl", ["$ scope", "$ q", function ($ scope, $ q) {$ scope.test = 1; // Ini hanya digunakan untuk menguji apakah angularjs adalah normal, dan tidak memiliki fungsi lain var defer1 = $ q.defer (); var janji1 = cons conse1.pomise lain. Promise1 --- Success "); console.log (value);}, function (value) {console.log (" in promise1 --- error "); console.log (value);}, function (value) {console.log (" in promise1 --- error "); console.log (value);} function (value) {console);" in-log (value) (value); Console.log (nilai); Console.log (nilai); </script> </body> </html>Di mana Defer () digunakan untuk membuat objek yang ditangguhkan, Defer.promise digunakan untuk mengembalikan objek janji untuk menentukan metode kemudian. Ada tiga parameter di saat itu, yaitu, panggilan balik yang berhasil, panggilan balik yang gagal, dan panggilan balik perubahan negara.
Variabel atau fungsi yang dilewati dalam Resolve akan mengembalikan hasilnya dan akan dianggap sebagai parameter metode pertama kemudian. Kemudian metode mengembalikan objek janji, sehingga dapat ditulis sebagai
xxxx
.then (a, b, c)
.then (a, b, c)
.then (a, b, c)
.menangkap()
.Akhirnya()
Mari kita terus berbicara tentang kode di atas, lalu ... Tangkap ... akhirnya menganggapnya sebagai percobaan ... Tangkap ... akhirnya di Java.
semua () metode
Metode ini semua () dapat menggabungkan banyak primis menjadi satu. Ketika semua janji dijalankan dengan sukses, panggilan balik selanjutnya akan dieksekusi. Parameter dalam panggilan balik adalah hasil dari setiap eksekusi janji.
Metode ini dapat digunakan ketika beberapa metode dieksekusi dalam batch.
var fungca = function () {console.log ("faCa"); Kembalikan "Halo, FUNA"; } var funcb = function () {console.log ("funcb"); kembali "halo, funb"; } $ q.all ([funca (), funcb ()]) .then (function (hasil) {console.log (hasil);});Hasil Eksekusi:
funca
funcb
Array ["halo, funa", "halo, funb"]
When () metode
Ketika metode dapat dilewati parameter, yang mungkin merupakan nilai, dan mungkin objek eksternal yang sesuai dengan standar janji.
var fungca = function () {console.log ("faCa"); Kembalikan "Halo, FUNA"; } $ q.when (funca ()) .then (function (hasil) {console.log (hasil);});Metode ini dapat digunakan ketika parameter yang ditularkan tidak pasti.
Halo, FUNA
Di atas adalah pengantar terperinci tentang informasi tentang janji --- $ q layanan di AngularJS. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!