Я создал массив, который будет хранить динамические значения, поступающие из БД. Когда я печатаю массив внутри функции транзакции, он печатает. когда я пытался распечатать сторону, я не получил значения. Я объявил массив глобально. в чем проблема, мой код выглядит следующим образом:
function sendCategoryDetails() {
var selected_category = $('#select-choice :selected').val();
alert("control : " + selected_category);
var mycoodinatesDetails;
var myLocation = new Array();
var db = window.sqlitePlugin.openDatabase({name: "MYDB"});
db.transaction(function (tx) {
tx.executeSql("select Location from Locationlog WHERE Category = '"+selected_category+"';", [],
function (tx, res) {
for (var i = 0; i < res.rows.length; i++) {
myLocation[i] = res.rows.item(i).Location;
}
alert (myLocation +" length : "+ myLocation.length); // Values are printing
});
});
alert (myLocation +" length : "+ myLocation.length); // values are not getting, It showing the length is 0
}
Какие-либо предложения?
tx.executeSql
- это асинхронная функция. alert
работает внутри функции, так как это обратный вызов, и обработка асинхронизации завершена. alert
после того, как функция запускается до завершения функции, таким образом, она undefined
.
Решение: выполните работу внутри обратного вызова или вызовите другую функцию с массивом, переданным как параметр, и выполните там работу.
execute
в обратном вызове.