Именование обратных вызовов - это одна вещь, которую вы можете сделать, но другая вещь, которую вам нужно сделать, это иметь непересекающиеся транзакции SQL.( 1 )
Ваша первая транзакция должна выглядеть следующим образом:
// The whole thing starts here
db.transaction(selectTimeCB, null, ajaxPost);
Транзакция начинается с обратного вызова, чтобы выбрать время и время транзакции завершено, вызовите операцию ajaxPost.
// Initial transaction to get server_time
var selectTimeCB = function(t) {
var query = 'SELECT max(server_time) AS server_time FROM syncs';
t.executeSql(query, [], postLastSyncCB);
};
// This saves the results from the above select, and nothing else.
var server_time;
var postLastSyncCB = function(t, results) {
server_time = results.rows.item(0).server_time;
};
var ajaxPost = function() {
$.post('sync.json', { last_sync_time: (server_time || '1980-01-01') }, nextDbTransaction);
};
Если у вас есть перекрывающиеся транзакции SQL, это может реально снизить производительность базы данных.Недавно я проверил 200 смешанных транзакций в базе данных с чуть более 500 строками и обнаружил, что разделение транзакций сократило время выполнения с 90 до 3-5 секунд.