Node.js调用返回Promise函数读写文件运行异常求助
代码问题排查
你的代码存在以下几个核心错误,导致无法得到预期结果:
- 导入路径错误:
require的路径写为./script1 (1),和实际文件名script1.js不匹配,会直接导致模块导入失败 - 参数传递错误:定义的
one函数声明接收data形参,但实际调用one()时没有传入从文件读取到的内容,func1拿不到正确入参 - Promise用法错误:
await Promise(func1)属于错误写法,func1本身是接收参数后返回Promise对象的普通函数,不需要额外套Promise构造器,且调用时没有传入入参 - 异步时序错误:调用
one()后没有等待异步逻辑执行完成,就立刻执行文件写入操作;且one()是async函数,返回值是Promise对象,直接调用toString()得到的只会是[object Promise],不是func1的实际执行结果 - 入参未做清洗:
fs.readFile读取到的字符串可能携带首尾换行、空白字符,直接传入func1会因为参数不匹配走到default分支,拿不到预期的result1
正确可运行实现
推荐使用Node.js内置的Promise风格fs API,代码逻辑更清晰,避免回调嵌套:
const fs = require('fs/promises'); const func1 = require('./script1.js'); async function runTask() { try { // 读取输入文件,trim清洗掉首尾多余空白、换行 const inputContent = await fs.readFile('./input.txt', 'utf8'); const param = inputContent.trim(); // 传入参数调用func1,等待Promise返回结果 const outputContent = await func1(param); console.log('func1返回结果:', outputContent); // 拿到结果后再写入输出文件 await fs.writeFile('./output.txt', outputContent, 'utf8'); console.log('执行完成,结果已写入output.txt'); } catch (e) { // 统一捕获读文件、逻辑执行、写文件全流程错误 console.error('任务执行失败:', e); } } runTask();
如果需要兼容不支持fs/promises的老版本Node.js,可以使用回调嵌套的写法:
const fs = require('fs'); const func1 = require('./script1.js'); fs.readFile('./input.txt', 'utf8', (readErr, data) => { if (readErr) { console.error('读取输入文件失败:', readErr); return; } const param = data.trim(); func1(param) .then(result => { fs.writeFile('./output.txt', result, 'utf8', (writeErr) => { if (writeErr) { console.error('写入输出文件失败:', writeErr); return; } console.log('执行完成,结果已写入output.txt'); }) }) .catch(funcErr => { console.error('func1执行失败:', funcErr); }) })
内容的提问来源于stack exchange,提问作者Fernando Vasquez
相关产品推荐
相关产品推荐

