Memanggil Parameter di callback Node JS

Simple! but Necessary
3 min readFeb 17, 2021

channel: Simple But Neccesary

halo semuanya, simple but neccesary kali ini akan membahas tentang point simple yaitu gimana sih cara kerjanya nodejs? Kok banyak banget async function atau dalam tanda kutip fungsi yang berjalan sendiri dan memiliki callback. Pasti developer pemula bingung nih gunanya callback ini apa? kenapa ada fungsi dalam fungsi?
Nah sebelum itu semua, kita pelajari dulu apa itu callback.

Apa itu callback?

callback adalah sebuah fungsi yang nantinya akan dipanggil oleh fungsi lain sesuai dengan penempatannya.

callback ini menjadi fungsi alternatif yang kalau diteliti lebih lanjut, pada async function yang memiliki callback ini jarang sekali ditemukan nilai return seperti bahasa pemrograman lain. Karena salah satu kelebihan NodeJS yang berjalan secara bersamaan sehingga jarang sekali ada kegiatan saling tunggu menunggu.

Pastinya kalian bingung nih kalau mau dapetin nilai dari fungsi itu gimana caranya? contohnya yang seperti biasa kalian lakukan di pemrograman lain:

double a = getValue('a');

Nah bagaimana kalau kalian bertemu dengan function yang memiliki callback tanpa return?

Di sini lah gunanya callback
ada beberapa cara buat dapetin variable yang berhasil dihitung di fungsi-fungsi ini, kita akan membahas cara-cara buat dapetin nilai dalam fungsi yang tidak bisa didapatkan nilainya dari return

1. Penggunaan Fungsi Parent

Di kondisi berikut:

const fs = require(‘fs’);
fs.readFile(‘index.html’, (data)=>{
console.log(data);
});

kalau kalian di kondisi di atas, kalian cukup membuat fungsi baru sebagai parentnya, sehingga fungsi baru tersebut melempar callback.
misalkan nama fungsi yang dibuat adalah function higherLevel
sehingga:

const fs = require(‘fs’);function higherLevel(callback){
fs.readFile(‘index.html’, (data)=>{
callback(data); }
});

nah, di dalam fungsi ini bisa di-pass juga parameter, misalnya parameter files tinggal ditambahin di higherLevel sehingga bisa dipanggil oleh fungsi dalamnya:

function higherLevel(files, callback){
fs.readFile(‘index.html’, (data)=>{
// memberikan parameter files untuk digunakan pada callback
callback(files, data);
}
});

dari fungsi callback yang bakal bisa dipanggil nanti, bisa dapetin variable files dan data sebagai parameternya, tinggal dipake deh!

2. Penggunaan langsung

di kondisi di atas, jelas bahwa fs.readFile bisa dimasukkan fungsi secara langsung. Tetapi bisa juga digunakan secara langsung tanpa basa-basi! itu sih pasit gampang kan!

fs.readFile(‘index.html’, (data)=>{
// apa yang mau dilakuin ditulis di sini
});

3. Penggunaan Berulang (Nested)

dari solusi di atas emang paling gampang buat digunakan. nah, gimana kalau kondisinya satu sama lain saling membutuhkan dan saling menunggu tetapi fungsi yang diberikan tidak ada yang punya jenis syncnya (fungsi sinkron)?
misalnya, kalau sudah baca tentang NodeJS MySQL di W3Schools, pasti bingung dong kalau menjalankan kodingan berikut:

const mysql = require(‘mysql’);
// buat koneksi sql
const connection = mysql.createConnection({
host: “localhost”,
user: “root”,
pass: “pass”,
database: “example”
});
connection.query(“SELECT * FROM my_table”, (err, res, fields)=>{
// di sini udah dapetin result dari variable res
// tapi gimana hubunginnya?
// apa harus tulis di dalem sini semua?
console.log(res);
});

Dari yang sebelumnya sudah dipelajari, bisa memanfaatkan fungsi kalau query di atas bakal dipanggil terus menerus atau pun kalau merasa terlalu panjang untuk meulis semua di dalamnya. Jadi misalnya nama fungsinya adalah selectAll, kita berikan callback sehingga menjadi selectAll(callback) dengan isi di bawahnya. Tebak bakal jadi gimana?
.
.
Betul!

Jadi:

const selectAll = (callback){
connection.query(“SELECT * FROM my_table”, (err, res)=>{

//lakuin apapun dengan callback di bawah
callback(err, res);
});
}

Nah, sampe sini belum ada masalah. Gimana kalau mau buat beberapa query yang saling terkait? misalnya seperti pada 2 tabel berikut:

Tabel percobaan my_table dan my_sec_table

/** my_table:
*
* | id | name | category_id |
* — — — — — — — — — — — — — — — -
* | 20 | John | 230 |
* | 03 | Miya | 230 |
*
** my_sec_table:
*
* | id | name | location |
* — — — — — — — — — — — — — — — — -
* | 230 | Roaster | Jakarta |
* | 203 | Farmer | Jakarta |
*
**/

Ya betul! Bisa pakai nested callback, jadi fungsi callback yang dipakai juga punya callback sehingga, misalnya:

const selectFromTableTwo = (id, callback){   // Di sini ada dua fungsi yang saling menunggu,
// sehingga bisa jadi alternatif buat kalian!
connection.query(“SELECT * FROM my_table WHERE id = “ + id, (err, res, fields)=>{
connection.query(“SELECT * FROM my_sec_table WHERE id = “ + res.category_id, (err2, res2, fields2)=>{
callback(res2);
}
});
}

Memang terlihat mudah pas pertama kali baca. Ada juga yang menganggap susah, tergantung pemahamannya dan pengalamannya. Lebih sering coba praktekin dan kalian akan paham betul gimana cara kerjanya ya!

Ikuti artikel mingguan atau bahkan bisa harian dari Simple But Necessary! dari sini bakal belajar banyak tentang hal-hal yang harus diperhatikan yang mungkin tidak pernah diajarkan di mana-mana.

Tetap ikuti dan follow kami! Simple But Necessary

--

--

Simple! but Necessary
0 Followers

Koding yang kelihatan sepele tapi penting akan dibahas di sini!