非同期タスクのチェーンに依存しているため、2 つの関数で問題が発生しています。これclearAll
は、データベースを空にしてからページをリロードするクリック イベントです。 Clear
は、データベース モジュール ( database.clear
) の関数です。
適切であれば JQuery Promises/Deffered を使用したいと思いますが、このユースケースではそれらを完全に把握できません。
@Larry Kの回答に従ってコードを書き直しました
clearAll: function()
{
var refresh = function()
{
localStorage.clear();
sessionStorage.clear();
window.location.href = window.location.pathname;
console.log("feeling refreshed");
};
database.open();
//This is what I'd like to be able to do
//With Jquery or callbacks
$.when(database.clear()).then(refresh);
},
clear: function (callback, errorCallback)
{
var sql = "SELECT name FROM sqlite_master WHERE type='table' AND name != ?",
args = ["__WebKitDatabaseInfoTable__"];
var dbTableNamesResult = function (tx, result)
{
var dropSql = "";
for (var i = 0; i < result.rows.length; i++)
{
dropSql = "DROP TABLE IF EXISTS " + result.rows.item(i).name + "; ";
execute(dropSql);
}
};
execute(sql, args, dbTableNamesResult);
},