Saya sudah mencoba meneliti tentang bagaimana tepatnya fungsi asynchronous harus ditulis. Setelah banyak membongkar banyak dokumentasi, masih belum jelas bagi saya.
Bagaimana cara menulis fungsi asynchronous untuk Node? Bagaimana cara menerapkan penanganan peristiwa kesalahan dengan benar?
Cara lain untuk mengajukan pertanyaan saya adalah ini: Bagaimana saya harus menafsirkan fungsi berikut?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Juga, saya menemukan pertanyaan ini di SO ("Bagaimana cara membuat fungsi asinkron non-pemblokiran di node.js?") Menarik. Saya merasa belum dijawab.
javascript
asynchronous
node.js
Kriem
sumber
sumber
setTimeout
dansetInterval
di browser favorit Anda dan bermain-main dengannya juga. Atau callback ajax (mungkin yang paling dekat dengan pengalaman node), atau event listener untuk hal-hal yang Anda kenal seperti peristiwa klik dan muat. Model asinkron sudah ada di browser, dan keduanya persis sama di node.Jawaban:
Anda tampaknya membingungkan IO asinkron dengan fungsi asinkron. node.js menggunakan asynchronous non-blocking IO karena non blocking IO lebih baik. Cara terbaik untuk memahaminya adalah dengan menonton beberapa video oleh ryan dahl.
Tulis saja fungsi normal, satu-satunya perbedaan adalah bahwa fungsi tersebut tidak segera dijalankan tetapi diteruskan sebagai callback.
Umumnya API memberi Anda callback dengan err sebagai argumen pertama. Sebagai contoh
Merupakan pola yang umum.
Pola umum lainnya adalah
on('error')
. Sebagai contohEdit:
Fungsi di atas saat dipanggil sebagai
Akan mencetak
42
ke konsol secara asinkron. Dalamprocess.nextTick
kebakaran tertentu setelah callstack eventloop saat ini kosong. Tumpukan panggilan itu kosong setelahnyaasync_function
danconsole.log(43)
telah dijalankan. Jadi kami mencetak 43 diikuti oleh 42.Anda mungkin harus melakukan beberapa pembacaan di event loop.
sumber
Hanya lewat callback saja tidak cukup. Anda harus menggunakan settimer misalnya, untuk membuat fungsi menjadi async.
Contoh: Bukan fungsi asinkron:
Jika Anda akan menjalankan contoh di atas, Ini harusnya bagus, harus menunggu sampai fungsi-fungsi itu selesai berfungsi.
Fungsi pseudo multithread (async):
Yang ini akan sangat asinkron. Ini harusnya bagus akan ditulis sebelum async selesai.
sumber
Anda harus menonton ini: Node Tuts episode 19 - Asynchronous Iteration Patterns
Itu harus menjawab pertanyaan Anda.
sumber
Jika Anda TAHU bahwa suatu fungsi mengembalikan sebuah janji, saya sarankan menggunakan fitur async / await baru di JavaScript. Itu membuat sintaks terlihat sinkron tetapi berfungsi secara tidak sinkron. Saat Anda menambahkan
async
kata kunci ke suatu fungsi, ini memungkinkan Anda untukawait
menjanjikan dalam lingkup itu:jika suatu fungsi tidak mengembalikan sebuah janji, saya sarankan untuk membungkusnya dalam sebuah janji baru yang Anda tentukan, lalu selesaikan data yang Anda inginkan:
Intinya: manfaatkan kekuatan Janji.
sumber
Coba ini, ini berfungsi untuk node dan browser.
sumber
Saya telah menangani terlalu banyak jam untuk tugas seperti itu di untuk node.js. Saya terutama pria front-end.
Saya menemukan ini cukup penting, karena semua metode node menangani asyncronous dengan callback, dan mengubahnya menjadi Promise lebih baik untuk menanganinya.
Saya Hanya ingin menunjukkan hasil yang mungkin, lebih ramping dan mudah dibaca. Menggunakan ECMA-6 dengan async Anda dapat menuliskannya seperti ini.
itu
(undefined || null)
adalah untuk repl (read acara cetak loop) skenario, menggunakan terdefinisi juga bekerja.sumber