Roku BrightScript:如何等待函数执行完成并跨文件传递变量
Roku频道开发问题解决方法
1. 保证函数执行顺序(等待func1完成后再执行func2)
你当前两次调用MainFunction.observeField注册回调的方式,无法确保func1执行完成后再触发func2——itemSelected事件触发时两个回调会并行执行,且数据库查询属于异步操作,func1不会阻塞等待结果返回。
正确做法是只注册func1作为回调,在func1内的数据库查询完成后再调用func2:
修改file2.brs的func1及新增查询完成回调:
sub func1() ' 示例:使用异步数据库查询,传入结果回调 db = CreateObject("roDatabase") db.ExecuteAsync("SELECT * FROM target_table", "onDbQueryComplete") end sub sub onDbQueryComplete(result as Object) ' 处理查询结果 var queryData = result.GetRows()[0] ' 查询完成后调用func2 func2(queryData) end sub
同时删除file1.brs中重复的观察者注册,仅保留:
MainFunction.observeField("itemSelected", "func1") sub func2(data as Object) print data end sub
2. 组件/文件间变量访问问题
你当前的var1是func1的局部变量,func2无法直接访问,可通过两种方式解决:
全局变量方式:在文件顶部(函数外)声明全局变量,让跨文件函数共享:
在file2.brs开头添加:var sharedData = invalid后续
func1中赋值sharedData = result.GetRows()[0],func2即可直接访问sharedData。参数传递方式:避免全局变量依赖,直接将数据作为参数传入
func2(如上述代码示例中,onDbQueryComplete调用func2时传入查询结果)。
内容的提问来源于stack exchange,提问作者Shahar
相关产品推荐
相关产品推荐

