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

如何在循环外部获取循环内处理后的聚合数据?

解决循环处理字幕数据后生成单个SRT文件下载的问题

你需要在循环外部初始化一个变量来累加所有处理后的字幕内容,循环结束后再用这个完整内容生成单个下载文件。原代码的核心问题是:

  • inputToSRT 函数定义在循环内却未调用,且srtData被局限在函数内部,外部无法访问
  • 时间转换函数secondsToHms在循环内重复定义,造成不必要的性能损耗

以下是修正后的完整代码:

const handleData = async (e) => {
  if (e.key === "Enter") {
    try {
      const response = await fetch(`http://localhost:3000/api/getsubs`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ getInput }),
      });
      const res = await response.json();

      // 循环外初始化变量,存储所有字幕内容
      let srtData = '';

      // 把时间转换函数提到循环外,避免重复定义
      const secondsToHms = (seconds) => {
        const h = Math.floor(seconds / 3600);
        const m = Math.floor((seconds % 3600) / 60);
        const s = Math.floor((seconds % 3600) % 60);
        const ms = Math.round((seconds % 1) * 1000);
        return `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')},${ms.toString().padStart(3, '0')}`;
      };

      // 遍历处理每条字幕,追加到总内容中
      res.forEach((item, index) => {
        const subNum = index + 1;
        const start = secondsToHms(item.start);
        const end = secondsToHms(item.dur);
        const text = item.text;
        srtData += `${subNum}\n${start} --> ${end}\n${text}\n\n`;
      });

      // 循环结束后生成并下载单个SRT文件
      if (srtData) {
        const url = window.URL.createObjectURL(new Blob([srtData], { type: 'text/plain' }));
        const link = document.createElement("a");
        link.href = url;
        link.setAttribute("download", `FileName.srt`);
        document.body.appendChild(link);
        link.click();
        link.parentNode.removeChild(link);
        window.URL.revokeObjectURL(url); // 释放URL对象,避免内存泄漏
      }
    } catch (error) {
      console.error('获取字幕数据失败:', error);
    }
  }
};

关键修改说明:

  • 用async/await替代嵌套then,代码逻辑更清晰
  • 循环外初始化srtData字符串,每次循环将单条字幕内容追加进去
  • 将secondsToHms移到循环外,避免重复创建函数
  • 使用forEach遍历数据,代码更简洁易读
  • 添加异常捕获处理请求失败的情况
  • 下载时指定Blob的MIME类型,并主动释放URL对象资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:25:17