我正在创建一个在首次运行时执行不同的Phonegap应用程序。我检测第一次运行的方式是看到其中一个数据库表存在。您可以从下面的代码中看出,我正在检查(可能)表示该表已经存在的错误,从而证明这不是应用程序的第一次运行。
function databaseExists(){
var exists;
database.transaction(function(tx){
tx.executeSql('CREATE TABLE GLOBAL (uid, property, value)');
}, function(err){
exists = true;
}, function(){
exists = false;
});
return exists;
}
然而,我的问题是Javascript代码的异步执行意味着函数在成功(或错误)函数设置它的值之前返回其值。
在应用程序的初始化阶段调用此函数:
if (databaseExists()){
// Do Something
}
因此必须返回值而不是在事务的成功回调中执行函数。
有没有办法强制执行等待数据库事务完成或通过database.transaction对象返回值?
提前致谢, 乔恩
答案 0 :(得分:1)
您需要以回调形式编写它:
var dataBaseExists(yep, nope) {
database.transaction(function(tx) {
tx.executeSql('CREATE TABLE GLOBAL (uid, property, value)');
}, function(){
if (yep) {
yep.apply(this, arguments);
}
}, function(){
if (nope) {
nope.apply(this, arguments);
}
});
};
var itDoes = function() {
console.log("great");
};
var itDoesNot = function() {
console.log("what a pity");
};
databaseExists(itDoes, itDoesNot);
答案 1 :(得分:0)
您需要回调,但如果不需要检查表的存在,则可以使用localStorage轻松完成。
e.g。
if(localStorage.getItem('init') === null){
//init
localStorage.setItem('init', true);
}
您将避免处理数据库。
也许这会有所帮助“CREATE TABLE IF NOT NOT EXISTS ...”
答案 2 :(得分:0)
我知道那些程序员不喜欢我的解决方案,但我喜欢它!
var myfEspereti=false;
function Espereti(pStatus)
{
if (pStatus==="wait")
{
myfEspereti = true;
while(myfEspereti)
{
}
}
else if (pStatus==="go")
{
myfEspereti=false;
}
}
然后在您要等待异步调用时调用Espereti(" wait")。在异步通话中,当它完成后,请致电Espereti("去"),那就是它!