Функции обратного вызова SQLite имеют один или два параметра? - PullRequest
0 голосов
/ 12 октября 2019

Имеют ли функции обратного вызова SQLite один или два параметра?

Я видел много примеров этих функций, а некоторые имеют один, два или даже не имеют параметров. Возьмем следующий пример:

db.executeSql(
    'SELECT count(*) AS mycount FROM mytable;",
    [],
    function(dx, resultSet) {
        // resultSet.rows.item(0).mycount
    },
    function(dx, err) {
        // err.message
    }
);

В функциях обратного вызова как с успехом, так и с ошибкой предполагается, что dx является дескриптором соединения с базой данных. Но я видел примеры, которые опускают это и только проходят resultSet и err соответственно. Другими словами:

function(resultSet) {

и

function(err) {

и некоторые примеры, у которых нет параметров, отправляемых в обратный вызов успеха.

Какой правильный способ задания параметровк этим функциям?

1 Ответ

0 голосов
/ 12 октября 2019

Извините, после некоторого тщательного изучения того, что казалось вечностью, я пришел к выводу, что функции обратного вызова имеют дополнительный параметр, только когда запрос заключен в транзакцию.

Так что только длязапрос, вы бы сделали это:

db.executeSql(
    'SELECT count(*) AS mycount FROM mytable;",
    [],
    function(resultSet) {
        // resultSet.rows.item(0).mycount
    },
    function(err) {
        // err.message
    }
);

Но если вы используете транзакционный подход, это будет так:

db.transaction(function(tx) {
    db.executeSql(
        'SELECT count(*) AS mycount FROM mytable;",
        [],
        function(tx, resultSet) {
            // resultSet.rows.item(0).mycount
        },
        function(tx, err) {
            // err.message
        }
    );
});

Я не смог найти это объяснилв любой документации или в любых примерах, но когда вы смотрите на любые примеры, где используется транзакция, они всегда имеют дополнительный параметр в функциях обратного вызова, поэтому я просто предполагаю, что это правильное использование.

Есть мысли?

...