Belajar node js

Tutorial Promise Node.Js

Tutorial Promise Node.Js

Dalam tutorial sebelumnya, Anda akan melihat fungsi callback yang digunakan untuk event Asynchronous. Tetapi terkadang fungsi callback bisa menjadi mimpi buruk ketika menjadi terlalu bersarang-sarang dan program mulai menjadi panjang dan kompleks.

Dalam tutorial ini, Anda akan mempelajari-

Apa itu promise?

Sebelum kita mulai dengan promise, mari kita lihat kembali apa itu fungsi “callback” pada Node.js. Kita sudah sering melihat fungsi callback pada bab-bab sebelumnya, maka mari kita segera membahas salah satunya.

Contoh di bawah ini menunjukkan potongan kode yang digunakan untuk menghubungkan ke database MongoDB dan melakukan operasi pembaruan pada salah satu record dalam database. 

  1. Dalam kode di atas, bagian dari fungsi (err,db) dikenal sebagai deklarasi fungsi anonymous (anonim) atau callback. Ketika MongoClient membuat koneksi ke database MongoDB, MongoClient akan dikembalikan ke fungsi callback setelah operasi connection selesai. Jadi dalam artian tertentu, operasi connection terjadi pada background. Setelah selesai, operasi tersebut memanggil fungsi callback kita. Ingatlah bahwa ini adalah salah satu poin utama Node.js yang memungkinkan banyak operasi dilakukan secara bersamaan sehingga tidak memblokir user mana pun untuk menjalankan operasi.
  2. Blok kode kedualah yang dijalankan ketika fungsi callback dipanggil. Fungsi callback hanya memperbarui satu record di database MongoDB kita.

Jadi, apa itu promise? Promise hanyalah perbaikan pada fungsi callback dalam Node.js. Selama siklus pengembangan, mungkin ada saat di mana Anda perlu menempatkan beberapa fungsi callback bersamaan. Proses ini bisa menjadi agak berantakan dan sulit dipertahankan pada titik waktu tertentu. Singkatnya, sebuah promise adalah perbaikan pada callback yang berupaya mengatasi masalah-masalah ini.

Di bawah ini adalah sintaks dasar sebuah promise;

var promise = doSomethingAync()

promise.then(onFulfilled, onRejected)

  • “doSomethingAync” adalah setiap fungsi callback atau fungsi asynchronous (asinkronus) yang melakukan semacam pemrosesan.
  • Kali ini, terdapat value yang disebut “promise” yang dikembalikan ketika menetapkan callback.
  • Ketika sebuah promise dikembalikan, ia dapat memperoleh 2 output. Output ini ditetapkan oleh ‘then clause’. Operasi bisa saja berhasil, yang ditunjukkan dengan parameter ‘onFulfilled’. Atau bisa juga mendapati error, yang ditunjukkan dengan parameter ‘onRejected’.

Catatan: Aspek kunci dari sebuah promise adalah value return. Tidak ada konsep value return saat bekerja dengan callback normal dalam Node.js. Karena value return tersebut, kita memiliki kontrol lebih besar terhadap pendefinisian dan penetapan fungsi callback.

Dalam topik berikutnya, kita akan melihat contoh promise dan bagaimana promise mendapat keuntungan dari callback.

Callback ke promises

Sekarang mari kita lihat contoh bagaimana kita bisa menggunakan “promise” dari aplikasi Node.js. Untuk menggunakan promise dalam aplikasi Node.js, modul ‘promise’ harus didownload dan diinstal terlebih dahulu.

Kemudian kita akan mengubah kode kita seperti yang ditunjukkan di bawah ini, yang memperbarui nama karyawan dalam koleksi ‘Employee’ dengan menggunakan promise.

Langkah 1) Menginstal Modul NPM

Untuk menggunakan Promise dari dalam aplikasi Node JS, dibutuhkan modul promise. Untuk menginstal modul promise tersebut, jalankan perintah di bawah ini.

npm install promise

Langkah 2) Ubah kode untuk memasukkan 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:-

  1. Bagian pertama adalah memasukkan modul ‘promise’ yang akan memungkinkan kita untuk menggunakan fungsi dari ‘promise’ dalam kode kita.
  2. Sekarang kita dapat menambahkan fungsi ‘then’ ke dalam fungsi MongoClient.connect kita. Jadi ketika koneksi dibuat ke database, kita perlu mengeksekusi potongan kode yang ditetapkan setelahnya.
  3. Terakhir, kita menetapkan potongan kode kita yang berfungsi untuk memperbarui EmployeeName (nama karyawan) dari Employee dengan nama “Martin” menjadi “Mohan”.

Catatatan:-

Jika sekarang Anda memeriksa konten database MongoDB, maka record dengan EmployeeName “Martin”, maka akan diperbarui menjadi “Mohan.”

Untuk memeriksa apakah data telah dimasukkan dengan benar ke dalam database, Anda perlu menjalankan perintah berikut pada MongoDB.

  1. Use EmployeeDB
  2. db.Employee.find({EmployeeName :Mohan })

Pernyataan pertama memastikan Anda terhubung dengan database EmployeeDb. Pernyataan kedua mencari record yang memiliki karyawan dengan nama “Mohan”.

Menghadapi promise bersarang

Ketika menetapkan promise, perlu dicatat bahwa metode “then” itu sendiri menghasilkan promise. Jadi, dalam arti tertentu, promise bisa disatukan atau dirangkai satu sama lain.

Pada contoh di bawah, kita menggunakan chaining (perangkaian) untuk menetapkan 2 fungsi callback, yang keduanya menyisipkan record ke dalam database MongoDB.

(Catatan: Chaining [perangkaian] adalah suatu konsep yang digunakan untuk menghubungkan eksekusi metode satu dengan yang lain. Misalkan jika aplikasi Anda memiliki 2 metode yang disebut ‘methodA’ dan ‘methodB.’ Dan logikanya adalah ‘methodB’ harus dipanggil setelah ‘methodA,’ maka Anda akan membuat rantai 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 dijaga dengan menggunakan promise 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:-

  1. Sekarang kita menetapkan 2 klausa “then” yang dieksekusi satu per satu. Pada klausa pertama, kita melewati parameter ‘db’ yang berisi koneksi database kita. Kemudian kita menggunakan properti koleksi dari koneksi ‘db’ untuk menyisipkan record ke dalam koleksi ‘Employee’. Metode ‘insertOne’ digunakan untuk memasukkan dokumen yang sebenarnya ke dalam koleksi Employee (Karyawan).
  2. Kemudian kita juga menggunakan klausa 2nd then untuk memasukkan record lain ke dalam database.

Jika sekarang Anda memeriksa konten database MongoDB Anda, Anda akan menemukan kedua record tersebut telah dimasukkan ke dalam database MongoDB.

Membuat promise custom

Promise custom dapat dibuat dengan menggunakan modul node yang disebut ‘q.’ Library ‘q’ perlu didownload dan diinstal menggunakan node package manager. Setelah menggunakan library ‘q’, metode “denodeify” dapat dipanggil. Metode ini akan membuat fungsi apa pun menjadi fungsi yang mengembalikan promise.

Pada contoh di bawah ini, kita akan membuat fungsi sederhana yang disebut “Add”. Fungsi “Add” akan menambah 2 angka. Kita akan mengubah fungsi ini menjadi fungsi untuk mengembalikan promise.

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 custom kita untuk mengembalikan promise.

Langkah 1) Menginstal Modul NPM

Kita memerlukan modul q untuk menggunakan ‘q’ dari aplikasi Node JS. Untuk menginstal modul ‘q’ tersebut, jalankan perintah di bawah ini.

npm install q

Langkah 2) Tetapkan kode berikut yang akan digunakan untuk membuat promise custom.

Penjelasan Kode:-

  1. Bagian pertama adalah memasukkan libary ‘q’ dengan menggunakan kata kunci require. Dengan menggunakan library ini, kita akan dapat menetapkan fungsi apa pun untuk mengembalikan callback.
  2. Kita sedang membuat fungsi yang disebut Add yang akan menambah 2 angka yang ditetapkan dalam variabel a dan b. Jumlah dari nilai-nilai ini akan disimpan dalam variabel c.
  3. Kemudian kita menggunakan library q untuk denodeify (metode yang digunakan untuk mengubah fungsi apa pun menjadi fungsi yang akan mengembalikan promise) fungsi Add kita, atau sebaliknya mengubah fungsi Add kita menjadi fungsi yang mengembalikan promise.
  4. Sekarang kita memanggil fungsi “Add” kita dan kita bisa mendapatkan nilai return promise (pengembalian promise) karena langkah yang kita lakukan sebelumnya untuk mendenodeifikasi fungsi Add.
  5. Kata kunci ‘then’ digunakan menentukan bahwa jika fungsi sukses dijalankan, maka string “Addition function completed” (Penambahan fungsi selesai) ditampilkan pada console.log.

Ketika kode di atas dijalankan, output “Addition function completed” akan ditampilkan pada console.log seperti yang diperlihatkan di bawah ini.

Ringkasan

  • Menggunakan fungsi callback dalam Node.js memiliki kekurangan tersendiri. Terkadang selama proses pengembangan, penggunaan fungsi callback yang bersarang-sarang dapat membuat kode menjadi semakin berantakan dan semakin sulit untuk diurus.
  • Sebagian besar permasalahan dengan fungsi callback yang bersarang-sarang dapat diringankan dengan penggunaan promise dan generator dalam node.js
  • Sebuah Promise merupakan value yang dikembalikan oleh sebuah fungsi asynchronous untuk menandakan selesainya pemrosesan yang dilakukan oleh fungsi asynchronous.
  • Promise dapat ditempatkan di dalam satu sama lain untuk membuat kode terlihat lebih baik dan lebih mudah dijaga ketika fungsi asynchronous perlu dipanggil setelah fungsi asynchronous lainnya.

Leave a Reply

Your email address will not be published. Required fields are marked *