Вынуть sqlresultset из функции, используя javascript websql
У меня есть эта функция в моем проекте. Он должен вернуть результат запроса select, но не может этого сделать! jResult выходит пустым из функции транзакции. В первом console.log это нормально, и я могу проверить содержимое, но в конце он пуст! Поэтому я не могу вернуть результат моего запроса.
Кто-нибудь знает в чем проблема? Есть ли лучший способ вернуть sqlresultset из этой функции?
Спасибо
function getHistoryList() {
var jResult=[];
db.transaction(
function(transaction) {
transaction.executeSql( 'SELECT * FROM HISTORY;',[],
function (transaction, result) {
console.log("Query Success");
for (var i=0; i < result.rows.length; i++) {
jResult.push(result.rows.item(i));
}
console.log(jResult);
},
function (transaction, error) {
console.log("Query Error: " + error.message);
}
);
},
function (error) {
console.log("Transaction Error: " + error.message);
},
function () {
console.log("Transaction Success");
}
);
console.log(jResult);
return jResult; // -> [] always
}
1 ответ
Функции транзакции () и executeSql() являются асинхронными. Это означает, что код после этих функций может быть выполнен до выполнения транзакций sql.
Вот почему эти функции принимают функции обратного вызова параметров. Эти функции выполняются, когда асинхронная функция завершает свою работу.
Причина, по которой работает первый console.log, заключается в том, что он выполняется в функции обратного вызова: после выполнения запроса sql.
Итак, если вы хотите использовать результат запроса, вы должны сделать это в функции обратного вызова, которую вы передаете в параметре асинхронной функции.