SQLite和JS - 确定事务何时完成

时间:2012-12-14 16:53:28

标签: javascript html5 sqlite transactions

这是我的第一篇文章,但我现在已经搜索了很多这个解决方案,但我仍然找不到答案。我认为自己是一个新手JavaScript开发人员所以我希望有人可以指出我做错了什么。

我正在使用HTML5开发iPhone游戏。我想要发生的是每当我在游戏中死亡时它应该用新分数更新数据库然后跳转到新页面(分数屏幕)。

我有一个游戏类(使用单词“class”缺少更好的单词)调用update方法然后回调应该调用showScoreScreen函数(关闭当前页面) )一旦交易完成。唯一的问题是,它没有等待足够长的时间来完成交易,我的分数也没有更新。

如果我在那里添加一些代码等待1秒再跳到分数屏幕,那么一切正常。因此,要么是在事务完成之前我的回调被执行,要么我的回调没有正确实现(最有可能)。谁能指出我在这里做错了什么?这是我第一次使用SQLite,但经过几个小时的文档处理后,我觉得我做的是正确的。

仅供参考 -

- 我尝试在sucess处理程序中实现回调而不是 finally 块,但是遇到了同样的问题。

- 我将“self”传递给 updateScore 的原因是因为它更改为 setInterval 函数中的新上下文

- 我在这个帖子中发现了类似的问题,但没有真正的答案 - SQLite Success Callback Fires Before Transaction Finishes

///////////////////////// GAME CLASS ///////////////////////////////////

endLevel: function(){

    var self = this;            
    self.setGameOver(true);

    // Wait until death animation has played
    var wait = setInterval(function() {
        if(self.canEndLevel){

            var score = self.getScore();
            self.updateScore(self);
            clearInterval(wait);
        }
    }, 200);                               
},

updateScore: function(self){
    //TODO: Get score and determine if higher
    self.dbConnection.updateScore(self.showScoreScreen);    
},

showScoreScreen: function(){

    window.location.href='./score.html?level=' + window.levelNo + '&score=' + 'S'                           
},

/////////////////////////////////////////////////////////////////



///////////////////// DBConnection Class //////////////////////////

updateScore: function(callback){            

    var sucessHandler = this.sucessHandler;
    var errorHandler = this.errorHandler;

    try{
        this.db.transaction(
            function (transaction) {        
                transaction.executeSql('update score set grade = "JAME444" where levelId = 1', [], sucessHandler, errorHandler);
            }
        );  
    }
    catch(e){}
    finally {
        callback();
    }
},
.
.

////////////////////////////////////////////////////////////

0 个答案:

没有答案