Estoy tratando de hacer una función que verifique cuántos registros hay en la base de datos y envíe el número a la variable:
var records = -1; async function howManyRecords() { let myPromise = new Promise(function (resolve) { DB.transaction(function (tx) { tx.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function (tx, rs) { records = rs.rows.item(0).mycount; resolve(); },); }); }); await myPromise; console.log("records from promise function: " + records); return myPromise; }Luego, me gustaría usar el número en otras funciones, por ejemplo, mostrar en el registro de la consola cuando el dispositivo esté listo:
onDeviceReady.then(function () { howManyRecords(); console.log("after calling function records are: " + records); }La función howManyRecords cuenta los registros correctamente, pero luego los registros variables no son correctos:
IMG: después de llamar a la función, los registros son: -1 // registros de la función de promesa: 5
Realmente necesito ayuda, soy nuevo en el tema y estoy atrapado aquí desde hace mucho tiempo y no puedo continuar. Estoy usando cordova sqlite.
Prueba esto:
onDeviceReady.then(async function () { await howManyRecords(); console.log("after calling function records are: " + records);}Este problema no es para su comportamiento asincrónico. Aquí, en realidad, vuelve a asignar el valor de la variable de registros en la función. Es por eso que el valor de los registros cambia. Si desea deshacerse del problema, puede tomar otra variable en la función para contar registros. E inicializa la variable con let. Como let es el alcance del bloque, es por eso que su valor no pasará por la función.
var records = -1; async function howManyRecords() { let records = -1; let myPromise = new Promise(function (resolve) { DB.transaction(function (tx) { tx.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function (tx, rs) { records = rs.rows.item(0).mycount; resolve(); },); }); }); await myPromise; console.log("records from promise function: " + records); return myPromise; }