我目前在 html5 iphone web 应用程序上使用客户端数据库。
在我的代码中,我需要检查本地数据库中是否存在一行:
function isStarted(oDB) {
var ret = null;
oDB.query(sql,params,function(transaction,result) {
if(result.rows.length > 0 ) {
ret = true;
} else {
ret = false;
}
});
return ret;
}
不幸的是 isStarted() 的返回发生在回调函数之前,我总是得到一个“null”值。
在里面W3c spec我们可以看到“同步数据库API”,但我该如何使用它?
有没有办法通过异步请求获得良好的“ret”值?
感谢您的帮助
获取一个对象实现DatabaseSync
你必须打电话openDatabaseSync(...)
代替openDatabase(...)
。我不知道iPhone,也不知道什么oDB
你拥有的对象是,但根据规范你只能得到openDatabaseSync
WebWorker 中的方法而不是普通 Web 浏览器中的方法window
。当然XMLHttpRequest
已经证明,UI 线程中的潜在长度同步操作不是一个好主意。
不可能同步运行异步代码,反之亦然。为此,您需要 JavaScript 所没有的语言级功能,例如线程或协同例程。您必须退出函数并将控制权返回给浏览器,以允许它执行 HTTP 请求或数据库查询,并回调您提供给它的处理函数。
因此,每次执行涉及数据库 IO 的操作时,您都必须“由内而外”重写代码以传递回调函数,而不是期望返回值。
function tellMeWhenIsStarted(oDB, callback) {
oDB.query(sql,params,function(transaction,result) {
callback(result.rows.length>0);
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)