Estoy intentando llamar a una función que SELECCIONE los valores de mi base de datos Web SQL. Me gustaría devolver los valores SELECTED en una variable dentro de la función principal. Pero, la variable siempre regresa en blanco, si es global o no.Web SQL SELECCIONE el valor de retorno de la transacción
Como podrá ver el console.log dentro de la función selectRow registra los valores correctos de la consulta de la base de datos, pero console.log aparece en blanco en la función initDB.
También he notado que el registro en blanco aparece antes del registro dentro de la función selectRow. Encontré foros donde las personas hablan de que las transacciones de la base de datos son asincrónicas. Entiendo que esta es la razón por la cual mi variable que se devuelve está en blanco. Sin embargo, después de golpear mi cabeza contra la pared muchas veces todavía no puedo encontrar una manera de evitar este problema asincrónico.
/** Initialize Database **/
function initDB(){
createTable();
var pleaseWork = selectRow("SELECT * FROM planets;");
console.log(pleaseWork);
}
/** Select Row from Table **/
function selectRow(query){
var result = [];
db.transaction(function (tx) {
tx.executeSql(query, [], function(tx, rs){
for(var i=0; i<rs.rows.length; i++) {
var row = rs.rows.item(i)
result[i] = {
id: row['id'],
name: row['name']
}
}
console.log(result);
}, errorHandler);
});
return result;
}
Muchas gracias. Las retrollamadas son un nuevo concepto para mí, pero me aseguraré de aprender más sobre ellas. –
Las devoluciones de llamada son el concepto más difícil de acostumbrarse al comenzar con javascript – drinovc