Предполагая, что вы не очень хорошо разбираетесь в JavaScript, вы захотите ознакомиться с асинхронным программированием и обратными вызовами, так как это действительно суть JavaScript.Когда ваша функция getSQLresults выполняется, она сначала запускает асинхронную функцию с помощью this.db.transaction, который, по сути, просит БД установить транзакцию и выполнить обратный вызов после ее установления.Непосредственно после (функция (транзакция) {....}) вы увидите, что это новая функция, которая передается функции db.transaction в качестве обратного вызова в форме параметра.Как только БД установит транзакцию, он выполнит эту функцию обратного вызова.
Когда это произойдет, вызывается новая асинхронная функция, которая называется "action.executeSql ", которая запрашивает транзакцию, которую вы ранее установили, для выполненияЗапрос SQL и возврат результатов (или ошибка).Вы заметите, что после параметров «theSql» и «parmAry» вы передаете две новые функции.Оба из них также известны как обратные вызовы.Они являются функциями, переданными в функцию «action.executeSql »в качестве параметров, которые будут вызваны после завершения функции.
Ключом ко всему этому является то, что это происходит асинхронно, а не синхронно, то есть программа нене останавливайся и жди ответа.Программа запустит эти события и продолжит работу (и ВОЗВРАЩАЕТСЯ из функции getSQLresults) до того, как будут выполнены другие функции.Таким образом, вы не можете просто присвоить значение результатам этой функции и ожидать получить значимый результат.Вместо этого, поскольку вы имеете дело с асинхронными функциями, вам также придется следовать стилю асинхронного программирования.Чтобы сделать это, вам просто нужно передать свой СОБСТВЕННЫЙ обратный вызов, который будет выполнен после завершения транзакций sql .......
function getSQLresults(input, callback){ // <---- new callback param
this.db.transaction(function(transaction) {
transaction.executeSql(
theSql,
parmAry,
function(transaction, results) {
// Execute the callback function, passing in our results
callback(results);
}, //this is the on success function
function(transaction, error) {} //this is the on failure function
);
}.bind(this));
};
// Setup a callback function to pass INTO getSQLresults as a parameter.
function fnToExecuteForCallback(results) {
// The results from the "transaction.executeSql" statement will now
// be available here, as they were passed in by executing this
// callback function - which is the "callback" parameter passed
// into getSQLresults...
}
var someInput = "???";
// Call the getSQLresults function, passing in our input and callback function.
getSQLresults(someInput, fnToExecuteForCallback);