2

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

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

我有一个游戏类(使用“类”这个词,因为没有更好的词),它调用更新方法,然后在事务完成后调用 showScoreScreen 函数(关闭当前页面)的回调。唯一的问题是它没有等待足够长的时间来完成交易并且我的分数没有更新。

如果我在其中添加一些代码以等待 1 秒,然后再跳转到分数屏幕,那么一切正常。因此,要么是我的回调在事务完成之前实现,要么我的回调没有正确实现(很可能)。谁能指出我在这里做错了什么?这是我第一次使用 SQLite,但是经过数小时的文档阅读后,我似乎在做正确的事情。

供参考 -

-我尝试在成功处理程序而不是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();
    }
},
.
.

////////////////////////////////////////////////////////////
4

0 回答 0