2014-01-16 138 views
0

我想编写一个函数,这将是这个样子:等到语句完成

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)时立即移动到下一行。

我该怎么办? 在此先感谢。

回答

2

事件是异步的,因此,在等待响应时不能停止所有其他代码执行。

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

你也可以实现某种形式的回调框架,以使您的execute方法将接受Function类型的第二paramater:

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方法。