等到语句完成

时间:2014-01-16 21:21:29

标签: actionscript-3 flash sqlite air

我想编写一个函数,它将如下所示:

public function execute(sql:String) {
        sessionDBConn.open(writeSessionDB);

        createStmt.sqlConnection = sessionDBConn; 
        createStmt.text = sql; 

        createStmt.addEventListener(SQLEvent.RESULT, onResult); 
        createStmt.addEventListener(SQLErrorEvent.ERROR, onError); 

        createStmt.execute(); 
    }

我希望此函数等到SQLLite语句完成。我现在所拥有的是,当语句执行完成时调用onResult,但是当我执行execute(sql)时代码立即移动到下一行。

我该怎么办? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

事件是异步的,因此,您无法在等待响应时暂停所有其他代码执行。

一种解决方案是重构代码,以便在execute方法中调用跟随onResult调用的所有代码。

您还可以实现某种形式的回调框架,这样您的execute方法就会接受Function类型的第二个参数:

public function execute(sql:String, callback:Function) {
    sessionDBConn.open(writeSessionDB);

    createStmt.sqlConnection = sessionDBConn; 
    createStmt.text = sql; 

    createStmt.addEventListener(SQLEvent.RESULT, callback); 
    createStmt.addEventListener(SQLErrorEvent.ERROR, onError); 

    createStmt.execute(); 
}

然后,您可以将所有相关代码放在传递给execute方法的任何方法中。