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

Node.js逐行读取文件后返回JSON字符串遇undefined问题求助

解决Node.js逐行读取文件后返回结果的问题

你遇到的核心问题是异步操作的时序坑——逐行读取文件是异步过程,你的myfunction没有正确通过Promise把异步结果传递出去,导致调用fct.myfunction()时,异步读取还没完成,直接拿到了undefined。下面给你具体的修复方案:

第一步:修改romlist-parser.js,用Promise包裹异步读取过程

把逐行读取的逻辑放在Promise里,读取完成后通过resolve返回JSON字符串,同时处理错误情况:

var fs = require('fs');
var readline = require('readline');

function myfunction() {
  // 返回一个Promise,让调用者能等待异步操作完成
  return new Promise((resolve, reject) => {
    // 替换成你的实际文件路径
    const fileStream = fs.createReadStream('./your-romlist-file.txt');
    const rl = readline.createInterface({
      input: fileStream,
      crlfDelay: Infinity // 识别所有换行符
    });

    const resultList = [];

    // 处理每一行数据
    rl.on('line', (line) => {
      // 这里可以根据你的需求处理每一行,比如解析后再存入数组
      resultList.push(line);
    });

    // 读取完成时,把结果转为JSON字符串并返回
    rl.on('close', () => {
      const jsonResult = JSON.stringify(resultList);
      resolve(jsonResult);
    });

    // 处理读取错误
    rl.on('error', (err) => {
      reject(new Error(`读取文件失败:${err.message}`));
    });
  });
}

// 导出函数供main.js调用
module.exports = { myfunction };

第二步:修改main.js的调用方式

因为myfunction现在返回的是Promise,你需要用.then()或者async/await来获取异步结果,不能直接同步打印:

方式1:使用.then()链式调用

var fct = require('./romlist-parser');

fct.myfunction()
  .then(jsonStr => {
    console.log(jsonStr); // 这里就能拿到预期的JSON字符串了
  })
  .catch(err => {
    console.error(err); // 捕获并打印错误
  });

方式2:使用async/await(更简洁的异步写法)

var fct = require('./romlist-parser');

// 把代码放在async函数里才能用await
async function run() {
  try {
    const jsonStr = await fct.myfunction();
    console.log(jsonStr);
  } catch (err) {
    console.error(err);
  }
}

run();

为什么原来的代码会输出undefined?

原来的myfunction大概率没有返回Promise,或者在异步读取完成前就已经执行完函数并返回了(异步操作还在后台跑),所以调用时直接拿到了undefined。而用Promise包裹后,函数会返回一个Promise对象,调用者可以等待这个Promise完成,从而获取到最终的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:56:39