Это нормальное поведение.Метод handleResult
вызывается только при наличии результатов, чего никогда не бывает (когда запрос возвращает пустой набор).Вы можете обработать этот случай в методе handleCompletion
, который всегда выполняется независимо от того, возвращает ли запрос какие-либо строки.
Вот простой пример для демонстрации:
Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
var DBTest = {
// chrome window loaded
onload: function(e) {
var appContent = document.getElementById("appcontent");
appContent.addEventListener("DOMContentLoaded", function(e) {
try {
var file = FileUtils.getFile("ProfD", ["cookies.sqlite"]);
var dbConn = Services.storage.openDatabase(file);
var stmt = dbConn.createStatement(
"SELECT * FROM moz_cookies WHERE name='trash'");
stmt.executeAsync({
handleResult: function(aResultSet) {
alert("handleResult");
},
handleError: function(aError) {
alert("handleError: " + aError.message);
},
handleCompletion: function(aReason) {
alert("handleCompletion: " + aReason);
}
});
} catch(e) {
alert(e);
}
}, true);
}
}
window.addEventListener("load", DBTest.onload, false);
aReason
Параметр может иметь следующие значения:
REASON_FINISHED = 0
Оператор нормально завершил выполнение. REASON_CANCELED = 1
Оператор прекратил выполнение, так как он был отменен. REASON_ERROR = 2
Оператор прекратил выполнение из-за ошибки.
Дальнейшее чтение: