Lesson JavaScript callback best practice akan membahas bagaimana menulis callback yang mudah dibaca dan dipahami.
Pada lesson tidak diperlukan untuk memahami jalannya program, contoh program lebih ditujukan untuk melihat perbedaan. Callback menggunakan anonymous function dan named function.
//contoh code callback dengan anonymous function var passport = require('passport'), LocalStrategy = require('passport-local').Strategy mongodb = require('mongodb').MongoClient; module.exports = function(){ passport.use(new LocalStrategy({ usernameField: 'userName', passwordFiled: 'password', }, function (username, password, done){ var url= 'mongodb://localhost:27017/libraryApp'; mongodb.connect(url, function(err, db){ var collection = db.collection('users'); collection.findOne({ username: username }, function(err, results){ if (results.password === password){ var user = results; done(null, user); }else{ done(null, false, { message: 'Bad Password' }); } } ); }); })); };
Dapat dilihat dari code diatas, tidak mudah dibaca dan dipahami. Jika kita membuat program seperti diatas, satu bulan kemudian, saat kembali melihat program tersebut, kemungkinan besar kita pun lupa, apa tujuan dari program diatas.
Berikut contoh code yang sama, namun menggunakan named function.
//contoh callback dengan named function var passport = require('passport'), LocalStrategy = require('passport-local').Strategy mongodb = require('mongodb').MongoClient; function findAndValidateUser(username, password, done){ var url= 'mongodb://localhost:27017/libraryApp'; function validateUser (err, results){ if(err){ return done(err, null) } if (results.password === password){ var user = results; return done(null, user); }else{ return done(null, false, { message: 'Bad Password' }); } } function findUser(err, db){ if(err){ return done(err, null) } var collection = db.collection('users'); collection.findOne({ username: username },validateUser); } mongodb.connect(url, findUser); } module.exports = function(){ passport.use(new LocalStrategy({ usernameField: 'userName', passwordFiled: 'password', }, findAndValidateUser)); };
Setelah menggunakan named Function, penggunaan callback akan lebih mudah dibaca. Ditambah dengan tools pada editor yang dapat menyembunyikan block code, maka akan lebih enak dibaca.

Pada contoh code diatas juga sudah diperbaiki untuk memastikan program keluar dari callback dan menggunakan perintah return.
Kesimpulan
Best practice callback adalah menggunakan named function. Jangan gunakan anonymous function.
Dengan menggunakan named function, alur code lebih terbaca, lebih mudah dipahami dan mudah dalam maintenance.
Selalu konsisten dengan pattern callback Anda. Contoh program diatas cocok untuk pemograman pada NodeJS. Untuk browser, pattern bisa sedikit berbeda. Mengenai pattern tidak akan dibahas disini.
Dan best practice terakhir adalah pastikan return callback, untuk memastikan program telah keluar dari callback.