У меня есть общая процедура для очистки моей БД:
function clearDB() { // Clears the database based on code in the file "db_definition.js".
var dwdb_dfd = $.Deferred();
var idx = 0;
this.maxDeletes = g_sSQL_dropWorkoutDB.length;
this.successCount = 0;
parentThis = this;
do {
$.when(transactDB(g_sSQL_dropDB[idx])).done(function() {
if(parentThis.successCount++ >= parentThis.maxDeletes) dwdb_dfd.resolve();
});
} while (++idx < this.maxDeletes);
return dwdb_dfd.promise();
}
И эта процедура вызывается из:
this.getNextDataSet = function() {
$.when(clearDB()).done(function() {
window.location.href = 'http://'+ document.location.host + '/webDBBuilder.php'
}
WebDBBuilder.php
- это файл, который читает данные из нашегосервер и строит / перестраивает локальную WebDB (несмотря на W3C, черт возьми. Мы начали это задолго до того, как они от нас отказались) из данных, доступных на серверной БД.Эта процедура вызывается, когда процедура опроса сервера отмечает наличие новых данных.Затем мы уничтожаем определенные таблицы в локальной БД - глобальная переменная g_sSQL_dropDB
представляет собой просто массив DROP TABLE IF EXISTS tbl_someTable
строк.
Подпрограмма transactDB()
- это еще одна функция с отложенной несущей, которая выполняет SQLЗаявление передано ему.transactDB()
работает должным образом, так как соответствующие таблицы удаляются должным образом и используется в остальной части приложения.Функция getNextDataSet()
является частью более крупного объекта.Он вызывается правильно.
Проблема в том, что переход на страницу просто никогда не происходит.Это какая-то проблема области видимости с отложенным объектом в функции clearDB()
?
Есть ли что-то в коде, который мне не хватает?Я попытался использовать done (), resol (), $ .when (). Then ().Нада.
Любая помощь будет принята с благодарностью.Я задал пару вопросов на форуме jQuery без каких-либо ответов, поэтому решил, что мне здесь повезет больше с stackoverflow!
<------------ Добавлено-------------->
Спасибо за отличный вклад.Я взял код, который дал мне Джулиан, и (с небольшим переключением синтаксиса в $ .map) он прекрасно работал!
И вы были правы насчет ссылки "this" в функции.Ранее я вытащил какой-то код из класса и просто пукнул.Var "g_sSQL_dropWorkoutDB" действительно является глобальным, который находится во включенном файле, который содержит только переменные, используемые для построения и удаления базы данных.
Джулиан, спасибо большое!
Скотт.