Solución:
Pude encontrar respuesta a esta pregunta. Aquí está para cualquiera que esté buscando:
var sqlite3 = require("sqlite3").verbose();
var readRecordsFromMediaTable = function(callback){
var db = new sqlite3.Database(file, sqlite3.OPEN_READONLY);
db.serialize(function() {
db.all("SELECT * FROM MediaTable", function(err, allRows) {
if(err != null){
console.log(err);
callback(err);
}
console.log(util.inspect(allRows));
callback(allRows);
db.close();
});
});
}
Un método basado en promesas
var readRecordsFromMediaTable = function(){
return new Promise(function (resolve, reject) {
var responseObj;
db.all("SELECT * FROM MediaTable", null, function cb(err, rows) {
if (err) {
responseObj = {
'error': err
};
reject(responseObj);
} else {
responseObj = {
statement: this,
rows: rows
};
resolve(responseObj);
}
db.close();
});
});
}
La respuesta aceptada usando db.all con una devolución de llamada es correcta ya que db.each no era realmente necesario. Sin embargo, si se necesitaba db.each, la solución se proporciona en la documentación de la API node-sqlite3, https://github.com/mapbox/node-sqlite3/wiki/API#databaseeachsql-param–callback-complete:
Base de datos # cada (sql, [param, …], [callback], [complete])
…
Después de que se hayan llamado todas las devoluciones de llamada de fila, se llamará a la devolución de llamada de finalización si está presente. El primer argumento es un objeto de error y el segundo argumento es el número de filas recuperadas
Entonces, donde finaliza la primera devolución de llamada, en lugar de solo} poner}, función () {…}. Algo como esto:
var readRecordsFromMediaTable = function(callback){
var db = new sqlite3.Database(file, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
var allRecords = [];
db.serialize(function() {
db.each("SELECT * FROM MediaTable", function(err, row) {
myLib.generateLog(levelDebug, util.inspect(row));
allRecords.push(row);
}, function(err, count) {
callback(allRecords);
db.close();
}
});
}