поведение нулевых результатов при ВЫБОРЕ с использованием ExecuteAsync объекта mozIStorageStatement,

#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 Оператор прекратил выполнение, поскольку произошла ошибка.

Дальнейшее чтение: