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

Google Apps Script结合FirebaseApp循环解析数据报错与优化咨询

代码优化方案

核心问题排查

  • 空值报错:直接访问嵌套对象属性,属性不存在时直接抛出异常
  • 执行过慢:循环内重复调用表格读写IO接口,每次请求、写入都触发一次通信,耗时成倍增加
  • 空输出:原代码中rows变量未定义,setValues时行数参数错误导致写入异常

优化后代码

function alfa_test() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('alfatest');
  const startRow = 3;
  const lastRow = sheet.getLastRow();
  const numRows = lastRow - startRow + 1;
  if (numRows <= 0) return;

  // 批量读取所有ID,减少IO次数
  const idRange = sheet.getRange(startRow, 1, numRows, 1);
  const idValues = idRange.getValues();
  const outputArr = [];

  for (let i = 0; i < numRows; i++) {
    const id = idValues[i][0];
    if (!id) {
      // 空ID直接补空行
      outputArr.push(new Array(18).fill(''));
      continue;
    }
    try {
      const url = 'http://api.scorebing.com/v4/race/view?token=&race_id=' + id;
      const response = FirebaseApp.getDatabaseByUrl(url);
      const dataRes = response.getData();
      // 可选链处理空属性
      const dataSF = dataRes?.race?.race_start_first ?? {};
      const dataL = dataRes?.sp ?? {};
      const halfBet = dataL.half_bet?.[0] ?? {};
      const halfRangfen = dataL.half_rangfen?.[0] ?? {};
      const halfDaxiao = dataL.half_daxiao?.[0] ?? {};

      // 组装行数据,属性不存在默认填空字符串
      const row = [
        dataSF.host_sp ?? '', dataSF.tie_sp ?? '', dataSF.guest_sp ?? '',
        dataSF.rangfen_host_sp ?? '', dataSF.rangfen_handicap ?? '', dataSF.rangfen_guest_sp ?? '',
        dataSF.daxiao_up_sp ?? '', dataSF.daxiao_handicap ?? '', dataSF.daxiao_low_sp ?? '',
        halfBet.host_sp ?? '', halfBet.tie_sp ?? '', halfBet.guest_sp ?? '',
        halfRangfen.host_sp ?? '', halfRangfen.handicap ?? '', halfRangfen.guest_sp ?? '',
        halfDaxiao.up_sp ?? '', halfDaxiao.handicap ?? '', halfDaxiao.low_sp ?? ''
      ];
      outputArr.push(row);
    } catch (e) {
      // 捕获请求/解析异常,补空行避免脚本中断
      outputArr.push(new Array(18).fill(''));
      console.error(`ID ${id} 处理失败:`, e.message);
    }
  }

  // 批量写入所有结果,仅一次IO操作
  sheet.getRange(startRow, 3, outputArr.length, 18).setValues(outputArr);
}

优化说明

  • 空值处理:使用可选链?.访问嵌套属性,配合空值合并运算符??给缺失属性默认填空字符串,外层加try/catch捕获异常避免脚本中途终止
  • 性能优化:一次性读取所有ID、一次性写入所有结果,把原来O(n)次的IO操作压缩到2次,执行速度可以提升90%以上
  • 空输出修复:移除了未定义的rows变量,统一组装输出数组后批量写入,参数匹配不会再出现写入异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:57:05