Tutorial Janji Node.js

Isi kandungan:

Anonim

Dalam tutorial sebelumnya, anda akan melihat fungsi panggilan balik yang digunakan untuk acara Asinkron. Tetapi kadang-kadang fungsi panggilan balik dapat menjadi mimpi buruk ketika mereka mulai bersarang, dan program ini mulai menjadi panjang dan kompleks.

Dalam tutorial ini, anda akan belajar-

  • Apa itu janji?
  • Panggilan balik kepada janji
  • Menangani janji-janji bersarang
  • Membuat janji tersuai

Apa itu janji?

Sebelum kita memulakan dengan janji, mari kita kaji semula fungsi "panggilan balik" di Node.js. Kami telah melihat fungsi panggilan balik ini banyak pada bab sebelumnya, jadi mari kita cepatkan salah satu daripadanya.

Contoh di bawah menunjukkan coretan kod, yang digunakan untuk menyambung ke pangkalan data MongoDB dan melakukan operasi kemas kini pada salah satu rekod dalam pangkalan data.

  1. Dalam kod di atas, bahagian fungsi (err, db) dikenali sebagai pengisytiharan fungsi tanpa nama atau panggilan balik. Apabila MongoClient membuat sambungan ke pangkalan data MongoDB, ia akan kembali ke fungsi panggil balik setelah operasi sambungan selesai. Oleh itu, operasi sambungan berlaku di latar belakang, dan apabila ia selesai, ia memanggil fungsi panggilan balik kami. Ingatlah bahawa ini adalah salah satu perkara penting dari Node.js untuk membolehkan banyak operasi berlaku secara serentak dan dengan itu tidak menyekat pengguna untuk melakukan operasi.

  2. Blok kod kedua adalah apa yang akan dilaksanakan apabila fungsi panggilan balik sebenarnya dipanggil. Fungsi panggil balik hanya mengemas kini satu rekod dalam pangkalan data MongoDB kami.

Jadi apa janji itu? Nah, janji hanyalah peningkatan fungsi panggilan balik di Node.js. Selama siklus hidup pengembangan, mungkin ada contoh di mana anda perlu menyusun banyak fungsi panggilan balik bersama-sama. Ini boleh menjadi tidak kemas dan sukar dijaga pada satu masa tertentu. Ringkasnya, janji adalah peningkatan untuk panggilan balik yang bertujuan untuk mengatasi masalah ini.

Sintaks asas janji ditunjukkan di bawah;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • "doSomethingAync" adalah sebarang panggilan balik atau fungsi tak segerak yang melakukan semacam pemprosesan.
  • Kali ini, ketika menentukan panggilan balik, ada nilai yang dikembalikan disebut "janji."
  • Apabila janji dikembalikan, ia dapat mempunyai 2 output. Ini ditakrifkan oleh 'kemudian klausa'. Sama ada operasi boleh menjadi kejayaan yang dilambangkan oleh parameter 'onFulfilled'. Atau boleh ada kesalahan yang dilambangkan oleh parameter 'onRejected'.

Catatan: Jadi aspek utama janji adalah nilai pulangan. Tidak ada konsep nilai kembali ketika bekerja dengan panggilan balik biasa di Node.js. Kerana nilai kembali, kami mempunyai lebih banyak kawalan bagaimana fungsi panggilan balik dapat ditentukan.

Dalam topik seterusnya, kita akan melihat contoh janji dan bagaimana mereka mendapat faedah daripada panggilan balik.

Panggilan balik kepada janji

Sekarang mari kita lihat contoh bagaimana kita dapat menggunakan "janji" dari dalam aplikasi Node.js. Untuk menggunakan janji dalam aplikasi Node.js, modul 'janji' mesti dimuat turun dan dipasang terlebih dahulu.

Kami kemudian akan mengubah kod kami seperti yang ditunjukkan di bawah, yang mengemas kini Nama Karyawan dalam koleksi 'Karyawan' dengan menggunakan janji.

Langkah 1) Memasang Modul NPM

Untuk menggunakan Janji dari dalam aplikasi Node JS, modul janji diperlukan. Untuk memasang modul janji, jalankan arahan di bawah

janji pasang npm

Langkah 2) Ubah kod untuk memasukkan janji

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});

Penjelasan Kod: -

  1. Bahagian pertama adalah memasukkan modul 'janji' yang akan membolehkan kita menggunakan fungsi janji dalam kod kita.
  2. Kita sekarang boleh menambahkan fungsi 'kemudian' ke fungsi MongoClient.connect kami. Jadi apa yang dilakukannya ialah apabila sambungan dibuat ke pangkalan data, kita perlu melaksanakan potongan kode yang ditentukan selepas itu.
  3. Akhirnya, kami menentukan coretan kod kami yang berfungsi untuk mengemas kini Nama Pekerja pekerja dengan nama "Martin" kepada "Mohan".

Catatan:-

Sekiranya sekarang anda memeriksa kandungan pangkalan data MongoDB anda, anda akan mendapati bahawa jika ada catatan dengan Nama Karyawan "Martin", ia akan dikemas kini menjadi "Mohan."

Untuk memastikan bahawa data telah dimasukkan dengan betul di dalam pangkalan data, anda perlu menjalankan perintah berikut di MongoDB

  1. Gunakan EmployeeDB
  2. db.Em Employee.find ({Nama Pekerja: Mohan})

Pernyataan pertama memastikan bahawa anda disambungkan ke pangkalan data EmployeeDb. Pernyataan kedua mencari rekod yang mempunyai nama pekerja "Mohan".

Menangani janji-janji bersarang

Semasa menentukan janji, perlu diperhatikan bahawa kaedah "kemudian" itu sendiri mengembalikan janji. Jadi dari satu segi, janji-janji dapat bersarang atau dirantai antara satu sama lain.

Dalam contoh di bawah ini, kami menggunakan rantai untuk menentukan 2 fungsi panggilan balik, yang keduanya memasukkan catatan ke dalam pangkalan data MongoDB.

( Catatan : Rantai adalah konsep yang digunakan untuk menghubungkan pelaksanaan kaedah antara satu sama lain. Andaikan jika aplikasi anda mempunyai 2 kaedah yang disebut 'methodA' dan 'methodB.' Dan logiknya sedemikian rupa sehingga 'methodB' harus dipanggil selepas 'methodA,' maka anda akan mengaitkan pelaksanaan sedemikian rupa sehingga 'methodB' dipanggil langsung selepas 'methodA.')

Perkara penting yang perlu diberi perhatian dalam contoh ini ialah kod menjadi lebih bersih, mudah dibaca dan dikekalkan dengan menggunakan janji-janji bersarang.

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});

Penjelasan Kod: -

  1. Kami sekarang mendefinisikan 2 klausa "kemudian" yang dilaksanakan satu demi satu. Pada klausa pertama kemudian, kami meneruskan parameter 'db' yang mengandungi sambungan pangkalan data kami. Kami kemudian menggunakan harta koleksi sambungan 'db' untuk memasukkan rekod ke dalam koleksi 'Pekerja'. Kaedah 'insertOne' digunakan untuk memasukkan dokumen sebenar ke dalam koleksi Pekerja.
  2. Kami kemudian menggunakan klausa 2 dan kemudian untuk memasukkan rekod lain ke dalam pangkalan data.

Sekiranya anda memeriksa kandungan pangkalan data MongoDB anda, anda akan menemui 2 rekod yang dimasukkan ke dalam pangkalan data MongoDB.

Membuat janji tersuai

Janji khusus dapat dibuat dengan menggunakan modul simpul yang disebut 'q.' Perpustakaan 'q' perlu dimuat turun dan dipasang menggunakan pengurus pakej nod. Setelah menggunakan perpustakaan 'q', metode "denodeify" dapat dipanggil yang akan menyebabkan fungsi apa pun menjadi fungsi yang mengembalikan janji.

Dalam contoh di bawah, kita akan membuat fungsi ringkas yang disebut "Tambah" yang akan menambah 2 nombor. Kami akan menukar fungsi ini menjadi fungsi untuk mengembalikan janji.

Setelah selesai, kami akan menggunakan janji yang dikembalikan oleh fungsi Tambah untuk memaparkan mesej di console.log.

Mari ikuti langkah-langkah berikut untuk membuat fungsi khusus kami untuk mengembalikan janji.

Langkah 1) Memasang Modul NPM

Untuk menggunakan 'q' dari dalam aplikasi Node JS, modul 'q' diperlukan. Untuk memasang modul 'q', jalankan arahan di bawah

npm pasang q

Langkah 2) Tentukan kod berikut yang akan digunakan untuk membuat janji tersuai.

Penjelasan Kod: -

  1. Bit pertama adalah memasukkan perpustakaan 'q' dengan menggunakan kata kunci yang diperlukan. Dengan menggunakan perpustakaan ini, kita akan dapat menentukan fungsi apa pun untuk mengembalikan panggilan balik.
  2. Kami membuat fungsi yang disebut Tambah yang akan menambahkan 2 nombor yang ditentukan dalam pemboleh ubah a dan b. Jumlah nilai ini akan disimpan dalam pemboleh ubah c.
  3. Kami kemudian menggunakan pustaka q untuk menafikan (kaedah yang digunakan untuk mengubah fungsi apa pun menjadi fungsi yang akan mengembalikan janji) fungsi Tambah kami atau sebaliknya mengubah fungsi Tambah kami ke fungsi yang mengembalikan janji.
  4. Kami sekarang memanggil fungsi "Tambah" kami dan dapat memperoleh nilai janji kembali kerana langkah sebelumnya yang kami lakukan untuk menafikan fungsi Tambah.
  5. Kata kunci 'kemudian' digunakan menentukan bahawa jika fungsi tersebut berjaya dilaksanakan maka tampilkan rentetan "Fungsi penambahan selesai" di console.log.

Apabila kod di atas dijalankan, output "Fungsi penambahan selesai" akan dipaparkan di console.log seperti yang ditunjukkan di bawah.

Ringkasan

  • Menggunakan fungsi panggilan balik di Node.js memang ada kekurangannya. Kadang-kadang semasa proses pengembangan, penggunaan fungsi panggilan balik yang bersarang dapat membuat kod menjadi lebih kemas dan sukar dikekalkan.
  • Sebilangan besar masalah dengan fungsi panggilan balik bersarang dapat dikurangkan dengan penggunaan janji dan penjana di node.js
  • Janji adalah nilai yang dikembalikan oleh fungsi tak segerak untuk menunjukkan selesainya pemprosesan yang dilakukan oleh fungsi tak segerak.
  • Janji dapat bersarang di antara satu sama lain untuk menjadikan kod kelihatan lebih baik dan lebih mudah dijaga apabila fungsi asinkron perlu dipanggil setelah fungsi asinkron yang lain