You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:05