Tutorial Janji Node.js
Dalam tutorial sebelumnya, Anda mungkin pernah melihat fungsi callback yang digunakan untuk kejadian Asynchronous. Namun, terkadang fungsi callback dapat menjadi mimpi buruk ketika fungsi tersebut mulai bersarang, dan program mulai menjadi panjang dan rumit.
Apa itu janji?
Sebelum kita mulai dengan janji, mari kita lihat kembali apa itu fungsi “panggilan balik” di Node.js. Kita sudah sering melihat fungsi callback ini di bab-bab sebelumnya, jadi mari kita bahas salah satunya dengan cepat.
Contoh di bawah ini menunjukkan cuplikan kode yang digunakan untuk menyambung ke a MongoDB database dan melakukan operasi pembaruan pada salah satu catatan dalam database.
- Pada kode di atas, bagian dari fungsi (err,db) dikenal sebagai deklarasi fungsi anonim atau panggilan balik. Ketika MongoClient membuat koneksi ke MongoDB database, itu akan kembali ke fungsi panggilan balik setelah operasi koneksi selesai. Jadi bisa dibilang, operasi koneksi terjadi di latar belakang, dan ketika selesai, fungsi panggilan balik akan dipanggil. Ingatlah bahwa ini adalah salah satu poin penting Node.js yang memungkinkan banyak operasi terjadi secara bersamaan dan dengan demikian tidak menghalangi pengguna mana pun untuk melakukan suatu operasi.
- Blok kode kedua adalah apa yang dieksekusi ketika fungsi panggilan balik dipanggil. Fungsi panggilan balik hanya memperbarui satu catatan di file MongoDB database.
Lalu apa itu janji? Ya, janji hanyalah peningkatan fungsi panggilan balik di Node.js. Selama siklus hidup pengembangan, mungkin ada kejadian di mana Anda perlu menggabungkan beberapa fungsi panggilan balik secara bersamaan. Hal ini bisa menjadi berantakan dan sulit dipertahankan pada titik waktu tertentu. Singkatnya, janji adalah peningkatan callback yang bertujuan untuk meringankan masalah ini.
Sintaks dasar dari sebuah janji ditunjukkan di bawah ini;
var promise = doSomethingAync() promise.then(onFulfilled, onRejected)
- “doSomethingAync” adalah panggilan balik atau fungsi asinkron yang melakukan beberapa jenis pemrosesan.
- Kali ini, saat mendefinisikan callback, ada nilai yang dikembalikan yang disebut “promise.”
- Ketika sebuah promise dikembalikan, ia dapat memiliki 2 keluaran. Hal ini didefinisikan oleh 'then clause'. Operasi tersebut dapat berhasil yang dilambangkan oleh parameter 'onFulfilled'. Atau dapat memiliki kesalahan yang dilambangkan oleh parameter 'onRejected'.
Catatan: Jadi aspek kunci dari sebuah janji adalah nilai pengembaliannya. Tidak ada konsep nilai kembalian saat bekerja dengan panggilan balik normal di Node.js. Karena nilai yang dikembalikan, kita memiliki kontrol lebih besar terhadap bagaimana fungsi panggilan balik dapat didefinisikan.
Pada topik berikutnya, kita akan melihat contoh janji dan manfaatnya dari callback.
Panggilan balik ke janji
Sekarang mari kita lihat contoh bagaimana kita dapat menggunakan “promises” dari dalam aplikasi Node.js. Untuk menggunakan janji dalam aplikasi Node.js, modul 'janji' harus diunduh dan diinstal terlebih dahulu.
Kami kemudian akan memodifikasi kode kami seperti yang ditunjukkan di bawah ini, yang memperbarui Nama Karyawan di koleksi 'Karyawan' dengan menggunakan janji.
Langkah 1) Memasang Modul NPM
Untuk menggunakan Promises dari dalam aplikasi Node JS, diperlukan modul janji. Untuk menginstal modul janji, jalankan perintah di bawah ini
npm instal janji
Langkah 2) Ubah kode untuk menyertakan 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 Kode: -
- Bagian pertama adalah menyertakan modul 'promise' yang memungkinkan kita menggunakan fungsionalitas janji dalam kode kita.
- Kita sekarang dapat menambahkan fungsi 'then' ke fungsi MongoClient.connect kita. Jadi yang dilakukan adalah ketika koneksi dibuat ke database, kita perlu mengeksekusi cuplikan kode yang ditentukan setelahnya.
- Terakhir, kami mendefinisikan cuplikan kode yang berfungsi memperbarui EmployeeName karyawan dengan nama "Martin" menjadi "Mohan".
Catatan: -
Jika sekarang Anda memeriksa isi file Anda MongoDB database, Anda akan menemukan bahwa jika ada catatan dengan Nama Karyawan “Martin”, maka akan diperbarui menjadi “Mohan.”
Untuk memeriksa apakah data telah dimasukkan dengan benar ke dalam database, Anda perlu menjalankan perintah berikut di MongoDB
- Gunakan EmployeeDB
- db.Employee.find({Nama Karyawan :Mohan })
Pernyataan pertama memastikan bahwa Anda terhubung ke database EmployeeDb. Pernyataan kedua mencari catatan yang memiliki nama karyawan “Mohan”.
Berurusan dengan janji-janji yang bersarang
Saat mendefinisikan janji, perlu dicatat bahwa metode “kemudian” itu sendiri mengembalikan sebuah janji. Jadi dalam arti tertentu, janji bisa disarangkan atau dirantai satu sama lain.
Pada contoh di bawah, kita menggunakan rangkaian untuk mendefinisikan 2 fungsi panggilan balik, yang keduanya menyisipkan rekaman ke dalam MongoDB database.
(Note: Chaining adalah konsep yang digunakan untuk menghubungkan eksekusi metode satu sama lain. Misalkan aplikasi Anda memiliki 2 metode yang disebut 'metodeA' dan 'metodeB.' Dan logikanya adalah 'methodB' harus dipanggil setelah 'methodA', lalu Anda akan merangkai eksekusi sedemikian rupa sehingga 'methodB' dipanggil langsung setelah 'methodA.')
Hal utama yang perlu diperhatikan dalam contoh ini adalah bahwa kode menjadi lebih bersih, mudah dibaca, dan mudah dipelihara dengan menggunakan 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 Kode: -
- Kami sekarang mendefinisikan 2 klausa “kemudian” yang dieksekusi satu demi satu. Pada klausa pertama, kita meneruskan parameter 'db' yang berisi koneksi database kita. Kami kemudian menggunakan properti koleksi dari koneksi 'db' untuk memasukkan catatan ke dalam koleksi 'Karyawan'. Metode 'insertOne' digunakan untuk memasukkan dokumen sebenarnya ke dalam koleksi Karyawan.
- Kami kemudian menggunakan 2nd kemudian klausa juga untuk memasukkan catatan lain ke dalam database.
Jika sekarang Anda memeriksa isi file Anda MongoDB database, Anda akan menemukan 2 record dimasukkan ke dalam MongoDB database.
Membuat janji khusus
Janji khusus dapat dibuat dengan menggunakan modul simpul yang disebut 'q.' Pustaka 'q' perlu diunduh dan diinstal menggunakan manajer paket simpul. Setelah menggunakan perpustakaan 'q', metode “denodeify” dapat dipanggil yang akan menyebabkan fungsi apa pun menjadi fungsi yang mengembalikan janji.
Dalam contoh di bawah ini, kita akan membuat fungsi sederhana bernama “Add” yang akan menambahkan 2 angka. Kita akan mengubah fungsi ini menjadi fungsi untuk mengembalikan sebuah promise.
Setelah selesai, kita akan menggunakan janji yang dikembalikan oleh fungsi Tambah untuk menampilkan pesan di console.log.
Mari ikuti langkah-langkah di bawah ini untuk membuat fungsi khusus untuk mengembalikan janji.
Langkah 1) Memasang Modul NPM
Untuk menggunakan 'q' dari dalam aplikasi Node JS, diperlukan modul 'q'. Untuk menginstal modul 'q', jalankan perintah di bawah ini
npm instal q
Langkah 2) Tentukan kode berikut yang akan digunakan untuk membuat janji khusus.
Penjelasan Kode: -
- Bit pertama adalah memasukkan perpustakaan 'q' dengan menggunakan kata kunci require. Dengan menggunakan perpustakaan ini, kita akan dapat mendefinisikan fungsi apa pun untuk mengembalikan panggilan balik.
- Kami membuat fungsi bernama Add yang akan menambahkan 2 angka yang didefinisikan dalam variabel a dan b. Jumlah nilai-nilai ini akan disimpan dalam variabel c.
- Selanjutnya, kami menggunakan pustaka q untuk mendeodeifikasi (metode yang digunakan untuk mengubah fungsi apa pun menjadi fungsi yang akan mengembalikan janji) fungsi Add kami atau dengan cara lain mengubah fungsi Add kami menjadi fungsi yang mengembalikan janji.
- Kami sekarang memanggil fungsi "Tambah" dan bisa mendapatkan nilai janji pengembalian karena langkah sebelumnya yang kami lakukan untuk mendekodekan fungsi Tambah.
- Kata kunci 'then' digunakan untuk menentukan bahwa jika fungsi berhasil dijalankan maka tampilkan string “Fungsi penambahan selesai” di console.log.
Ketika kode di atas dijalankan, output “Fungsi penambahan selesai” akan ditampilkan di console.log seperti yang ditunjukkan di bawah ini.
Ringkasan
- Menggunakan fungsi panggilan balik di Node.js memang memiliki kelemahan. Terkadang selama proses pengembangan, penggunaan fungsi callback yang disarangkan dapat membuat kode menjadi lebih berantakan dan sulit untuk dipelihara.
- Sebagian besar masalah dengan fungsi panggilan balik bersarang dapat dikurangi dengan penggunaan janji dan generator di node.js
- Promise adalah nilai yang dikembalikan oleh fungsi asinkron untuk menunjukkan penyelesaian pemrosesan yang dilakukan oleh fungsi asinkron.
- Promise dapat disarangkan di dalam satu sama lain untuk membuat kode terlihat lebih baik dan lebih mudah dipelihara ketika fungsi asynchronous perlu dipanggil setelah fungsi asynchronous lainnya