Получить возвращаемое значение в обратном вызове главной функции - PullRequest
1 голос
/ 30 августа 2011

Я занимаюсь разработкой приложения с использованием HTML5 и хранилища веб-баз данных.

Я хочу вставить строку в таблицу и вернуть новый идентификатор (первичный ключ таблицы), созданный с помощью:

function insertIntoTable(title, text, sketchFileName, categoryId)
{
    var db = window.openDatabase('xxx', '1.0', 'xxx database', 5*1024*1024);
    var returnedId = -1;
    db.transaction(
        function (tx) {
            if (sketchFileName == '')
            {
                tx.executeSql('INSERT INTO TableXXX (title, content, created, categoryID) VALUES (?, ?, ?, ?)', 
                            [title, text, Date.now(), categoryId], 
                            function (transaction, resultSet) {
                                if (resultSet.rowsAffected) {
                                    returnedId = resultSet.insertId;
                                }
                            }, handleSQLError);
            }
        }, handleSQLError);
    );

    return returnedId;
}

Но я всегда получаю -1. Я вижу новую строку в таблице, используя режим разработки Safari.

Любой совет?

1 Ответ

1 голос
/ 30 августа 2011

Если вы переместите объявление returnId за пределы функции, а затем дважды вызовете функцию, вы увидите, что возвращаемое значение является идентификатором первой вставки, поэтому оно устанавливается. Похоже, потому что база данных асинхронная, идентификатор устанавливается после возврата вашей функции, что имеет смысл.

Согласно спецификации W3C, должен быть openDatabaseSync, который можно использовать вместо openDatabase, но я не смог заставить его работать в Safari (5.0.1).

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

...