2つの機能に問題があるのは、非同期タスクの連鎖に依存しているためです。 clearAll
はクリックイベントで、データベースを空にしてからページをリロードする必要があります。 Clear
は、データベースモジュール(database.clear
)の関数です。Async JSプロセスを書き直してください(おそらくJQuery Promiseを使用しています)
私は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);
},
多くの非同期フローがある場合は、https://github.com/caolan/asyncをご覧ください。世界を幸せな場所にします。 –
@Ekin私はasnycの流れがたくさんあり、async.jsはチケットのように見えます。しかし、コードを全部書き直す前に、Async.jsで上記のことがどのように実行されるのかを教えてください。私は話すようにそれを与えている – JonWells