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

如何修复dagID = result[0].dag_id行触发的TypeError报错

报错根因

这个错误是两个代码逻辑问题叠加导致的:

  • 你在代码末尾直接无参调用determineCron(),函数形参result拿到的值是undefined,执行result[0]时相当于在undefined上读取索引0对应的属性,直接触发类型错误。
  • 就算你正确传入了result参数,后续bqConnection().query()是异步返回Promise的方法,你没有等待结果返回就直接读取job[0],后续还会触发一模一样的类型错误;另外你代码里的变量都没有加const/let声明,会意外污染全局作用域。
修复方案

按以下顺序修改代码即可解决:

  1. 删掉末尾裸调用的无参determineCron(),等accessData里处理完result数组后,把result作为参数传入determineCron调用。
  2. 所有读取数组索引的位置前加合法性校验,避免空数组、非数组入参导致的属性读取错误。
  3. 给异步的数据库查询加await等待结果返回,所有局部变量加声明关键字。

修复后的可运行代码:

async function accessData(){
    const access = await main();
    const result = access.dag_runs.map(file => ({
        start_date: file.start_date, 
        end_date: file.end_date, 
        state: file.state, 
        dag_run_id: file.dag_run_id, 
        dag_id: file.dag_id
    }))
    console.log(result);
    /*await bqConnection()
        .dataset('IPP_SLA')
        .table('sla_table')
        .insert(result);*/
    console.log(`Inserted ${result.length} rows`)
    // 拿到处理好的result后传参调用
    await determineCron(result)
}

async function determineCron(result){
    // 入参合法性校验
    if (!Array.isArray(result) || result.length === 0) {
        console.warn('dag_runs数据为空,跳过cron计算逻辑')
        return
    }
    const dagID = result[0].dag_id
    // 等待异步查询结果返回,直接解构拿到第一条数据
    const [cronConfig] = await bqConnection().query(`SELECT * FROM \`np-inventory-planning-thd.IPP_SLA.expected_sla\` where dag_id = "${dagID}"`)
    if (!cronConfig) {
        console.warn(`未查询到dag_id为${dagID}的cron配置`)
        return
    }
    const cronTime = cronConfig.cron_time
    const interval = parser.parseExpression(cronTime);
    console.log('Next run date: ', interval.next().toString());
}

// 启动入口
accessData()

额外提醒:直接拼接字符串生成SQL存在注入风险,如果dag_id来源不可信,建议替换为对应数据库驱动支持的参数化查询写法。

内容的提问来源于stack exchange,提问作者Josh Anderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:51:19