#javascript #firefox-addon #mozilla
#javascript #firefox-аддон #mozilla
Вопрос:
Я запускаю оператор SQL SELECT, используя функцию ExecuteAsync объекта mozIStorageStatement, дело в том, что когда оператор не получает результатов, функция handleresult обратного вызова не выполняется. Это нормальное поведение или у меня ошибка? Если это нормальное поведение, то как мне написать код, который будет выполняться в случае, если у нас нулевые результаты?
Ответ №1:
Это нормальное поведение. 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
Оператор прекратил выполнение, поскольку произошла ошибка.
Дальнейшее чтение: