我有一个清除数据库的通用例程:
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()
这是函数 中 Deferred 对象的某种范围问题吗?
我缺少的代码中有什么吗?我尝试过使用 done()、resolve()、$.when().then()。纳达。
任何帮助将不胜感激。我在 jQuery 论坛上问了几个问题,基本上没有任何回应,所以我想我在 stackoverflow 上会有更好的运气!
<------------ 已添加 -------------->
感谢您的大力投入。我使用了 Julian 给我的代码,并且(使用 $.map 的小语法切换),它运行良好!
你对函数中的“this”引用是正确的。我之前从课堂上提取了一些代码,只是脑子里放了个屁。var "g_sSQL_dropWorkoutDB" 确实是一个全局变量,它位于一个包含文件中,该文件仅包含用于构造和删除数据库的变量。
朱利安,非常感谢!
斯科特。