如何从这个sqlrunner函数获得布尔返回?

时间:2011-03-06 19:30:31

标签: actionscript-3 event-handling boolean return-value

希望你能从代码中看到我在这里尝试做的一点,基本上我需要检查数据库中是否存在记录,所以我调用一个函数来做,但我使用的是sqlrunner class,其中查询的结果被调用为事件响应,我不知道如何将结果函数中的值返回到父级。 我觉得我必须做一些倒退的事情......

        public function dbmatch(datetime:String, typecode:String):Boolean {
            var q:String = "SELECT DateTime FROM Event WHERE DateTime='"+datetime+"' AND EventTypeCode='"+typecode+"'"
            SQLService.getInstance().execute(q,null,matchresult);
            function matchresult(result:SQLResult):Boolean{
                var match:String = result.data[0];
                if (match == null){return false} else {return true}
            }
            return matchresult();
        }

别处:

var recordexists:Boolean = dbmatch(datetime, "Gb");

if (!recordexists){...}

1 个答案:

答案 0 :(得分:1)

基本上问题是SQLService类无法立即返回查询结果。这就是为什么它使用一个回调监听器函数(在你的例子中是matchresult)来通知你的程序以后它已经完成了搜索。

处理此问题的一种基本方法是调用查询,然后等待查询“回调”到您的侦听功能,然后继续执行。

public function dbmatch(datetime:String, typecode:String, callbackListener:Function):void {
    var q:String = "SELECT DateTime FROM Event WHERE DateTime='"+datetime+"' AND EventTypeCode='"+typecode+"'"
    SQLService.getInstance().execute(q, null, callbackListener);
}

其他地方:

    // Start the query, but can't react to it immediatly        
    dbmatch(datetime, "Gb", onSQLQueryResult);

    // Your callback function
    public function onSQLQueryResult(result:SQLResult):void {
        var match:String = result.data[0];
        if (match == null) {
            // Do stuff you were going to do at (!recordexists)
        }
    }