希望你能从代码中看到我在这里尝试做的一点,基本上我需要检查数据库中是否存在记录,所以我调用一个函数来做,但我使用的是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){...}
答案 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)
}
}