Dalam tutorial sebelumnya, Anda akan melihat fungsi callback yang digunakan untuk acara Asynchronous. Namun terkadang fungsi callback bisa menjadi mimpi buruk ketika mulai menjadi bersarang, dan program mulai menjadi panjang dan kompleks.
Dalam tutorial ini, Anda akan belajar-
- Apa janji itu?
- Panggilan balik untuk janji
- Berurusan dengan janji bertingkat
- Membuat janji kustom
Apa janji itu?
Sebelum kita mulai dengan promise, pertama mari kita lihat kembali apa itu fungsi "callback" di Node.js. Kita telah banyak 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 menyambungkan ke database MongoDB dan melakukan operasi update pada salah satu record dalam database.
-
Dalam kode di atas, bagian dari fungsi (err, db) dikenal sebagai deklarasi fungsi anonim atau panggilan balik. Saat MongoClient membuat koneksi ke database MongoDB, ia akan kembali ke fungsi callback setelah operasi koneksi selesai. Jadi dalam arti tertentu, operasi koneksi terjadi di latar belakang, dan ketika selesai, itu memanggil fungsi callback kita. Ingatlah bahwa ini adalah salah satu poin kunci Node.js untuk memungkinkan banyak operasi terjadi secara bersamaan dan dengan demikian tidak memblokir pengguna mana pun untuk melakukan operasi.
-
Blok kode kedua adalah apa yang dieksekusi ketika fungsi panggilan balik benar-benar dipanggil. Fungsi callback hanya memperbarui satu record di database MongoDB kami.
Jadi apa janji itu? Nah, janji hanyalah peningkatan pada fungsi panggilan balik di Node.js. Selama siklus hidup pengembangan, mungkin ada instance di mana Anda perlu menyatukan beberapa fungsi callback secara bersamaan. Ini bisa menjadi agak berantakan dan sulit untuk dipertahankan pada titik waktu tertentu. Singkatnya, promise adalah peningkatan pada callback yang bertujuan untuk mengatasi masalah ini.
Sintaks dasar dari suatu promise ditampilkan di bawah;
var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
- "doSomethingAync" adalah fungsi callback atau asynchronous yang melakukan semacam pemrosesan.
- Kali ini, saat menentukan callback, ada nilai yang dikembalikan yang disebut "janji".
- Jika janji dikembalikan, ia dapat memiliki 2 keluaran. Ini didefinisikan oleh 'klausa lalu'. Operasi bisa sukses yang dilambangkan dengan parameter 'onFulfilled'. Atau mungkin ada kesalahan yang dilambangkan dengan parameter 'onRejected'.
Catatan: Jadi, aspek kunci dari suatu promise adalah nilai yang dikembalikan. Tidak ada konsep nilai kembali saat bekerja dengan callback normal di Node.js. Karena nilai yang dikembalikan, kami memiliki kontrol lebih terhadap bagaimana fungsi panggilan balik dapat didefinisikan.
Di topik berikutnya, kita akan melihat contoh promise dan manfaatnya dari callback.
Panggilan balik untuk janji
Sekarang mari kita lihat contoh bagaimana kita bisa menggunakan "promise" dari dalam aplikasi Node.js. Untuk menggunakan promise dalam aplikasi Node.js, modul 'promise' harus didownload dan diinstal terlebih dahulu.
Kami kemudian akan mengubah kode kami seperti yang ditunjukkan di bawah ini, yang memperbarui nama Karyawan di koleksi 'Karyawan' dengan menggunakan promise.
Langkah 1) Menginstal Modul NPM
Untuk menggunakan Promises dari dalam aplikasi Node JS, modul promise diperlukan. Untuk menginstal modul promise, jalankan perintah di bawah ini
npm install promise
Langkah 2) Ubah kode untuk menyertakan promise
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 promise dalam kode kita.
- Sekarang kita bisa menambahkan fungsi 'then' ke fungsi MongoClient.connect kita. Jadi yang dilakukannya adalah ketika koneksi dibuat ke database, kita perlu mengeksekusi potongan kode yang ditentukan setelahnya.
- Terakhir, kami menentukan cuplikan kode kami yang melakukan pekerjaan memperbarui EmployeeName karyawan dengan nama "Martin" menjadi "Mohan".
Catatan:-
Jika Anda sekarang memeriksa konten database MongoDB Anda, Anda akan menemukan bahwa jika record dengan EmployeeName "Martin" ada, itu akan diperbarui menjadi "Mohan."
Untuk memeriksa bahwa data telah dimasukkan dengan benar ke dalam database, Anda perlu menjalankan perintah berikut di MongoDB
- Gunakan EmployeeDB
- db.Employee.find ({EmployeeName: Mohan})
Pernyataan pertama memastikan bahwa Anda terhubung ke database EmployeeDb. Pernyataan kedua mencari catatan yang memiliki nama karyawan "Mohan".
Berurusan dengan janji bertingkat
Saat mendefinisikan promise, perlu diperhatikan bahwa metode "kemudian" itu sendiri mengembalikan sebuah promise. Jadi, dalam arti tertentu, janji dapat disarangkan atau dirangkai satu sama lain.
Pada contoh di bawah ini, kami menggunakan chaining untuk menentukan 2 fungsi callback, keduanya memasukkan record ke database MongoDB.
( Catatan : Chaining adalah konsep yang digunakan untuk menghubungkan eksekusi metode satu sama lain. Misalkan jika aplikasi Anda memiliki 2 metode yang disebut 'methodA' dan 'methodB.' Dan logikanya adalah 'methodB' harus dipanggil setelah 'methodA', maka Anda akan merangkai eksekusi sedemikian rupa sehingga 'methodB' dipanggil langsung setelah 'methodA.')
Hal utama yang perlu diperhatikan dalam contoh ini adalah kode menjadi lebih bersih, dapat dibaca, dan dipelihara dengan menggunakan janji bertingkat.
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: -
- Kita sekarang mendefinisikan 2 klausa "lalu" yang dieksekusi satu demi satu. Pada klausa then pertama, kami meneruskan parameter 'db' yang berisi koneksi database kami. Kami kemudian menggunakan properti collection dari koneksi 'db' untuk memasukkan record ke dalam koleksi 'Employee'. Metode 'insertOne' digunakan untuk memasukkan dokumen aktual ke dalam koleksi Karyawan.
- Kami kemudian menggunakan klausa 2 nd kemudian juga untuk memasukkan catatan lain ke dalam database.
Jika Anda sekarang memeriksa konten database MongoDB Anda, Anda akan menemukan 2 record telah dimasukkan ke dalam database MongoDB.
Membuat janji kustom
Promise khusus dapat dibuat dengan menggunakan modul node yang disebut 'q.' Pustaka 'q' perlu diunduh dan diinstal menggunakan manajer paket node. Setelah menggunakan pustaka 'q', metode "denodeify" bisa dipanggil yang akan menyebabkan fungsi apa pun menjadi fungsi yang mengembalikan janji.
Pada contoh di bawah ini, kita akan membuat fungsi sederhana bernama "Tambah" yang akan menambahkan 2 angka. Kami akan mengubah fungsi ini menjadi fungsi untuk mengembalikan sebuah janji.
Setelah selesai, kita akan menggunakan promise yang dikembalikan oleh fungsi Add untuk menampilkan pesan di console.log.
Mari ikuti langkah-langkah di bawah ini untuk membuat fungsi kustom kita untuk mengembalikan sebuah promise.
Langkah 1) Menginstal Modul NPM
Untuk menggunakan 'q' dari dalam aplikasi Node JS, diperlukan modul 'q'. Untuk menginstal modul 'q', jalankan perintah di bawah ini
npm install q
Langkah 2) Tentukan kode berikut yang akan digunakan untuk membuat janji kustom.
Penjelasan Kode: -
- Bit pertama adalah memasukkan pustaka 'q' dengan menggunakan kata kunci yang dibutuhkan. Dengan menggunakan pustaka ini, kita akan dapat mendefinisikan fungsi apa pun untuk mengembalikan panggilan balik.
- Kami membuat fungsi yang disebut Tambah yang akan menambahkan 2 angka yang ditentukan dalam variabel a dan b. Jumlah nilai ini akan disimpan di variabel c.
- Kami kemudian menggunakan pustaka q untuk mendenodeifikasi (metode yang digunakan untuk mengonversi fungsi apa pun menjadi fungsi yang akan mengembalikan janji) fungsi Tambah kami atau sebaliknya mengubah fungsi Tambah kami menjadi fungsi yang mengembalikan janji.
- Kita sekarang memanggil fungsi "Tambah" dan bisa mendapatkan nilai janji yang dikembalikan karena langkah sebelumnya yang kita lakukan untuk mengubah kode fungsi Tambah.
- Kata kunci 'then' digunakan menentukan bahwa jika fungsi berhasil dijalankan maka menampilkan string "Fungsi tambahan selesai" di console.log.
Ketika kode di atas dijalankan, output "Fungsi tambahan selesai" akan ditampilkan di console.log seperti yang ditunjukkan di bawah ini.
Ringkasan
- Menggunakan fungsi callback di Node.js memang memiliki kekurangan. Terkadang selama proses pengembangan, penggunaan fungsi callback yang disarangkan dapat membuat kode lebih berantakan dan sulit dikelola.
- Sebagian besar masalah dengan fungsi callback bersarang dapat diatasi dengan penggunaan promise dan generator di node.js
- Promise adalah nilai yang dikembalikan oleh fungsi asinkron untuk menunjukkan penyelesaian pemrosesan yang dilakukan oleh fungsi asinkron.
- Janji dapat disarangkan satu sama lain untuk membuat kode terlihat lebih baik dan lebih mudah dipertahankan ketika fungsi asinkron perlu dipanggil setelah fungsi asinkron lainnya