Dari apa yang saya mengerti ada tiga cara memanggil kode asinkron:
- Acara, mis
request.on("event", callback);
- Panggilan balik, mis
fs.open(path, flags, mode, callback);
- Janji
Saya menemukan perpustakaan node-janji tapi saya tidak mengerti.
Bisakah seseorang menjelaskan tentang janji-janji itu dan mengapa saya harus menggunakannya?
Juga, mengapa itu dihapus dari Node.js?
javascript
node.js
promise
ajsie
sumber
sumber
Jawaban:
Janji dalam node.js berjanji untuk melakukan beberapa pekerjaan dan kemudian memiliki callback terpisah yang akan dieksekusi untuk keberhasilan dan kegagalan serta menangani batas waktu. Cara lain untuk memikirkan janji-janji di node.js adalah bahwa mereka adalah penghasil emisi yang hanya dapat memancarkan dua peristiwa: sukses dan kesalahan.
Hal paling keren tentang janji adalah Anda bisa menggabungkannya ke dalam rantai ketergantungan (lakukan Promise C hanya saat Promise A dan Promise B selesai).
Dengan menghapusnya dari inti node.js, itu menciptakan kemungkinan membangun modul dengan implementasi janji yang berbeda yang dapat duduk di atas inti. Beberapa di antaranya adalah simpul-janji dan masa depan .
sumber
Karena pertanyaan ini masih memiliki banyak pandangan (seperti milik saya), saya ingin menunjukkan bahwa:
sumber
Sebuah janji adalah "hal" yang mewakili hasil "akhirnya" dari suatu operasi. Poin yang perlu diperhatikan di sini adalah, hal itu meringkas detail ketika sesuatu terjadi dan memungkinkan Anda untuk fokus pada apa yang harus terjadi setelah sesuatu itu terjadi. Ini akan menghasilkan kode yang bersih dan dapat dipertahankan di mana alih-alih memiliki panggilan balik di dalam panggilan balik di dalam panggilan balik, kode Anda akan terlihat seperti:
Spesifikasi janji menyatakan bahwa janji itu
Metode harus mengembalikan janji baru yang dipenuhi ketika suksesHandler yang diberikan atau callback kegagalanHandler selesai. Ini berarti bahwa Anda dapat menjalin janji bersama ketika Anda memiliki serangkaian tugas asinkron yang perlu dilakukan dan diyakinkan bahwa urutan operasi dijamin sama seperti jika Anda telah menggunakan panggilan balik. Jadi alih-alih meneruskan panggilan balik di dalam panggilan balik di dalam panggilan balik, kode dengan janji dirantai tampak seperti:
Untuk mengetahui lebih banyak tentang janji-janji dan mengapa janji itu sangat keren, periksa blog Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/
sumber
Tutorial baru ini tentang Janji dari penulis PouchDB mungkin adalah yang terbaik yang pernah saya lihat di mana saja. Ini dengan bijak mencakup kesalahan rookie klasik yang menunjukkan pola penggunaan yang benar dan bahkan beberapa pola-anti yang masih umum digunakan - bahkan dalam tutorial lainnya !!
Nikmati!
PS Saya tidak menjawab beberapa bagian lain dari pertanyaan ini karena sudah dibahas dengan baik oleh orang lain.
sumber
Mike Taulty memiliki serangkaian video , masing-masing berdurasi kurang dari sepuluh menit, menggambarkan cara kerja perpustakaan WinJS Promise.
Video-video ini cukup informatif, dan Mike berhasil menunjukkan kekuatan API Janji dengan beberapa contoh kode yang dipilih dengan baik.
Perlakuan tentang bagaimana pengecualian ditangani sangat baik.
Terlepas dari referensi WinJs, ini adalah seri video minat umum, karena API Janji secara luas serupa di banyak implementasinya.
RSVP adalah implementasi Promise yang ringan yang lolos dari test suite Promise / A +. Saya sangat suka API, karena mirip dengan antarmuka WinJS.
Perbarui Apr-2014
Kebetulan, perpustakaan WinJS sekarang open source .
sumber
deferreds
danresolve
dandeferred.promise.then
dan menentukan daripromiseActions
dalam dokumentasi perpustakaan Q populer. Apakah Anda tahu sesuatu yang sederhana ini untuk Node.js ?Keuntungan lain dari janji adalah bahwa penanganan kesalahan dan pengecualian melempar dan menangkap jauh lebih baik daripada mencoba menanganinya dengan panggilan balik.
The bluebird perpustakaan menerapkan janji-janji dan memberikan jejak stack panjang besar, sangat cepat, dan memperingatkan tentang kesalahan yang tidak tertangkap. Ini juga lebih cepat dan menggunakan lebih sedikit memori daripada perpustakaan janji lainnya, menurut http://bluebirdjs.com/docs/benchmarks.html
sumber
Apa sebenarnya janji itu?
Sebuah janji hanyalah sebuah objek yang merepresentasikan hasil dari operasi async. Janji dapat berupa salah satu dari 3 negara berikut:
pending :: Ini adalah kondisi awal, artinya janji tidak terpenuhi atau ditolak.
terpenuhi :: Ini berarti janji telah terpenuhi, berarti nilai yang diwakili oleh janji siap digunakan.
ditolak :: Ini berarti operasi gagal dan karenanya tidak dapat memenuhi janji. Terlepas dari negara, ada tiga entitas penting yang terkait dengan janji yang benar-benar perlu kita pahami
fungsi pelaksana :: fungsi pelaksana mendefinisikan operasi async yang perlu dilakukan dan yang hasilnya diwakili oleh janji. Ini memulai eksekusi segera setelah objek janji diinisialisasi.
resolving :: resolve adalah parameter yang diteruskan ke fungsi eksekutor, dan seandainya eksekutor berjalan dengan sukses maka resolusinya disebut dengan meneruskan hasil.
reject :: reject adalah parameter lain yang diteruskan ke fungsi pelaksana, dan digunakan ketika fungsi pelaksana gagal. Alasan kegagalan bisa diteruskan ke tolak.
Jadi, setiap kali kita membuat objek janji, kita harus menyediakan Pelaksana, Putuskan dan Tolak.
Referensi :: Janji
sumber
Saya juga telah melihat janji-janji di node.js baru-baru ini. Sampai saat ini, when.js tampaknya menjadi jalan yang harus ditempuh karena kecepatan dan penggunaan sumber dayanya, tetapi dokumentasi tentang q.js memberi saya pemahaman yang jauh lebih baik. Jadi gunakan when.js tetapi q.js docs untuk memahami subjek.
Dari q.js readme on github:
sumber
Obyek janji merupakan penyelesaian atau kegagalan operasi asinkron.
Jadi untuk menerapkan janji, Anda perlu dua bagian: -
1. Menciptakan Janji:
2. Menangani Janji:
sumber