Penjana Node.js & Bandingkan dengan Panggilan Balik

Isi kandungan:

Anonim

Dalam tutorial ini, kita akan belajar mengenai Generator dan perbezaannya dengan Callback

Apakah penjana?

Penjana telah menjadi terkenal di Node.js sejak kebelakangan ini dan ini mungkin disebabkan oleh apa yang mereka mampu lakukan.

  • Penjana adalah pelaksanaan fungsi yang dapat ditangguhkan dan disambung semula di kemudian hari.
  • Penjana berguna semasa menjalankan konsep seperti 'pelaksanaan malas'. Ini pada dasarnya bermaksud bahawa dengan menangguhkan pelaksanaan dan melanjutkan sesuka hati, kita dapat menarik nilai hanya ketika kita perlu.

Penjana mempunyai 2 kaedah utama di bawah

  1. Kaedah hasil - Kaedah hasil dipanggil dalam fungsi untuk menghentikan pelaksanaan fungsi pada baris tertentu di mana kaedah hasil dipanggil.
  2. Kaedah seterusnya - Kaedah ini dipanggil dari aplikasi utama untuk melanjutkan pelaksanaan fungsi yang mempunyai kaedah hasil. Pelaksanaan fungsi akan berlanjutan hingga kaedah hasil berikutnya atau hingga akhir kaedah.

Mari kita lihat contoh bagaimana penjana boleh digunakan.

Dalam contoh kita, kita akan mempunyai fungsi Tambah sederhana yang akan menambah 2 nombor, tetapi kita akan terus menghentikan pelaksanaan metode pada titik yang berbeza untuk menunjukkan bagaimana penjana dapat digunakan.

function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();

Penjelasan Kod: -

  1. Langkah pertama adalah menentukan "fungsi" penjana kita. Perhatikan bahawa ini dilakukan dengan menambahkan "*" pada kata kunci fungsi. Kami kemudian menentukan fungsi yang disebut Tambah yang mengambil parameter x.
  2. Kata kunci hasil adalah khusus untuk penjana. Ini menjadikannya alat yang kuat untuk menghentikan fungsi di tengah-tengah apa sahaja. Jadi di sini, pelaksanaan fungsi akan dihentikan sehingga kita menggunakan fungsi () berikutnya, yang akan dilakukan pada Langkah 4. Pada ketika ini, nilai x akan menjadi 6 dan pelaksanaan fungsi akan dihentikan.
  3. Di sinilah kita mula-mula memanggil fungsi penjana dan menghantar nilai 5 ke fungsi Tambah kami. Nilai ini akan diganti dalam parameter x fungsi Tambah kami.
  4. Sebaik sahaja kita memanggil fungsi () seterusnya, fungsi Tambah () akan meneruskan pelaksanaan. Apabila pernyataan seterusnya var y = hasil (null) akan dijalankan, fungsi Tambah () akan berhenti dijalankan lagi.
  5. Sekarang setelah memanggil fungsi () seterusnya, pernyataan seterusnya akan dijalankan, dan nilai gabungan x = 5 dan y = 6 akan ditambah dan dikembalikan.

Panggilan balik berbanding penjana

Penjana digunakan untuk menyelesaikan masalah apa yang dikenali sebagai callback hell. Kadang-kadang fungsi panggilan balik menjadi sangat bersarang semasa pengembangan aplikasi Node.js sehingga menjadi terlalu rumit untuk menggunakan fungsi panggilan balik.

Di sinilah penjana berguna. Salah satu contoh yang paling biasa adalah semasa membuat fungsi pemasa.

Mari kita lihat contoh di bawah bagaimana penjana terbukti berguna berbanding panggilan balik.

Contoh kita hanya akan membuat fungsi kelewatan masa yang sederhana. Kami kemudian mahu memanggil fungsi ini dengan kelewatan 1000, 2000 dan 3000 ms.

Langkah 1) Tentukan fungsi panggilan balik kami dengan kod penangguhan masa yang diperlukan.

function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}

Penjelasan Kod: -

  1. Di sini kita membuat fungsi yang disebut Timedelay dengan parameter yang disebut ptime. Ini akan memerlukan kelewatan masa yang diperlukan yang ingin kami kenalkan dalam aplikasi kami.
  2. Langkah seterusnya adalah dengan hanya membuat pesan, yang akan ditampilkan kepada pengguna yang mengatakan bahawa aplikasi akan berhenti sebilangan besar milisaat ini.

Langkah 2) Sekarang mari kita lihat kodnya jika kita memasukkan panggilan balik. Andaikan kita mahu memasukkan panggilan balik berdasarkan nilai 1000, 2000 dan 3000 milisaat, kod di bawah menunjukkan bagaimana kita perlu melaksanakannya menggunakan panggilan balik.

Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})

Penjelasan Kod: -

  1. Kami memanggil Timedelay sebagai panggilan balik dengan nilai 1000 sebagai nilai.
  2. Seterusnya kami ingin memanggil fungsi Timedelay lagi dengan nilai 2000 sebagai nilai.
  3. Akhirnya, kami mahu memanggil fungsi Timedelay sekali lagi dengan nilai 3000 sebagai nilai.

Dari kod di atas, anda dapat melihatnya menjadi lebih tidak kemas kerana kami ingin mula memanggil fungsi tersebut berkali-kali.

Langkah 3) Sekarang mari kita lihat bagaimana melaksanakan kod yang sama menggunakan penjana. Dari kod di bawah ini anda sekarang dapat melihat betapa mudahnya melaksanakan fungsi Timedelay menggunakan generator.

function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}

Penjelasan Kod: -

  1. Kami pertama kali menentukan fungsi penjana yang akan digunakan untuk memanggil fungsi Timedelay kami.
  2. Kami memanggil fungsi Yield bersama dengan fungsi Timedelay dengan 1000 sebagai nilai parameter.
  3. Kami kemudian memanggil fungsi Yield bersama dengan fungsi Timedelay dengan 2000 sebagai nilai parameter.
  4. Akhirnya, kita memanggil fungsi Yield bersama dengan fungsi Timedelay dengan 3000 sebagai nilai parameter.

Ringkasan

Penjana juga boleh digunakan untuk mengurangkan masalah dengan panggilan balik bersarang dan membantu menghilangkan apa yang dikenali sebagai panggilan balik. Penjana digunakan untuk menghentikan pemprosesan fungsi. Ini dicapai dengan penggunaan kaedah 'hasil' dalam fungsi tak segerak.