Я пытаюсь написать способ синхронного выполнения набора запросов sqlite в среде WebDB.Я придумал то, что я считаю равносильным синхронной процедуре, но я не уверен, как это проверить.Вот что у меня есть:
var db = openDatabase("test1", "1.0", "test", 5 * 1024 * 1024);
function synchronousSql(tx, sqlStack, callback) {
if (sqlStack.length !== 0) {
var q = sqlStack.shift();
console.log(+new Date() + ' ' + q);
tx.executeSql(q, [], synchronousSql(tx, sqlStack, callback), null);
} else {
callback();
}
}
var seq = [
'drop table if exists table1',
'drop table if exists table2',
'drop table if exists table3',
'drop table if exists table4',
'drop table if exists table5',
'create table table1(id integer, value text)',
'create table table2(id integer, value text)',
'create table table3(id integer, value text)',
'create table table4(id integer, value text)',
'create table table5(id integer, value text)',
'drop table if exists table1',
'drop table if exists table2',
'drop table if exists table3',
'drop table if exists table4',
'drop table if exists table5'
];
db.transaction(function(tx) {
synchronousSql(tx, seq, function() {
console.log(+new Date() + ' - from synchronousSql callback');
});
}, null, function() {
console.log(+new Date() + ' - from transaction callback');
});
На бумаге (я думаю) это должно работать.Глядя на это, я думаю, что мое предупреждающее сообщение появится, когда выполнено последнее утверждение, не обязательно, когда оно вернется, но я не уверен, как это исправить.Я попытался указать обратный вызов в своих аргументах для функции synchronousSql
, но это означало, что мне пришлось вызывать его рекурсивно с обратным вызовом, и если я использовал пустую анонимную функцию, это, казалось, переписывало желаемый обратный вызов.
ТакЯ предполагаю два вопроса: во-первых, действительно ли это синхронно;и во-вторых, как я могу реализовать последний обратный вызов для выполнения последнего обратного вызова в стеке?
edit : обновил код до более поздней версии.Первый вопрос все еще остается, однако: это действительно синхронно?