gru*_*unk 7 javascript database html5
我目前在html5 iphone webapp上使用客户端数据库.在我的代码中,我需要检查本地数据库中是否存在行:
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;
Run Code Online (Sandbox Code Playgroud)
}
不幸的是,isStarted()的返回发生在回调函数之前,我总是得到一个"null"值.在W3c规范中,我们可以看到"synchronous-database-api",但我该如何使用它?是否有一个技巧,以获得asynchronus requets良好的"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);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 8
我是唯一一个发现这个异步请求荒谬的人吗?更重要的是,Safari现在似乎只实现了异步模型......我想知道我们如何有效地编写代码...
我喜欢使用异步数据库驱动程序进行严格编程的任何链接.
| 归档时间: |
|
| 查看次数: |
7407 次 |
| 最近记录: |