javascript – HTML5数据库API:同步请求

我目前在 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;

}

不幸的是,isstarted()的返回发生在回调函数之前,我总是得到一个“null”值.
W3c spec中我们可以看到“synchronous-database-api”,但我该如何使用它?
是否有一个技巧,以获得asynchronus requets良好的“ret”值?

谢谢你的帮助

解决方法

获取实现DatabaseSync的对象,您必须调用openDatabaseSync(…)而不是openDatabase(…).我不知道iPhone,或者你的oDB对象是什么,但根据规范,你只能在WebWorker中获得openDatabaseSync方法,而不是在普通的Web浏览器窗口中.当然,XMLHttpRequest已经证明UI线程中潜在长度的同步操作不是一个好主意.

同步运行异步代码是不可能的,反之亦然.为此,您需要语言级功能,如JavaScript没有的线程或协同例程.您必须退出函数并将控制权返回给浏览器,以允许它执行HTTP请求或数据库查询,并回调您给出的处理函数.

因此,每次执行涉及数据库IO的操作时,您都必须重写代码“由内而外”来传递回调函数,而不是期望返回值.

function tellMeWhenIsstarted(oDB,callback) {
    oDB.query(sql,result) {
        callback(result.rows.length>0);
    }
});

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...