NodeJS中getDataFromDir函数返回undefined问题求助
问题分析与修复方案
核心问题:getDataFromDir 函数返回 undefined 的原因
你的 getDataFromDir 是 async 函数,但内部调用 fsp.readdir().then(...) 后没有返回这条 Promise 链,导致函数默认返回 undefined。后续 await getDataFromDir(...) 拿到的是 undefined,自然无法调用 .then() 方法。
分步修复
1. 补全缺失的模块导入
代码中使用了 http、path、fs.promises 但未导入,先补上:
const http = require('http'); const path = require('path'); const fsp = require('fs').promises;
2. 修复 getDataFromDir 的返回值
有两种简洁的修复方式:
方式一:返回原 Promise 链
直接在 fsp.readdir 前添加 return,让函数返回异步操作的 Promise:
async function getDataFromDir(fileName){ return fsp .readdir(path.join(fileName)) .then(async (indir) => { const list = [] for (const item of indir) { // 如果不需要文件状态信息,可删除此行 const src = await fsp.stat(path.join(fileName, item)) list.push(item) } return list; }) }
方式二:用 async/await 完全重构(更易读)
避免混合使用 .then() 和 await,统一用 async/await 写法:
async function getDataFromDir(fileName){ const indir = await fsp.readdir(path.join(fileName)); const list = []; for (const item of indir) { // 若仅需文件名,可删除 stat 调用以提升性能 // const src = await fsp.stat(path.join(fileName, item)); list.push(item); } return list; }
3. 修复服务器逻辑
await getDataFromDir(...) 已经直接拿到结果(不是 Promise),无需再调用 .then(),同时补充错误处理和响应返回:
const server = http.createServer(async (req, res) => { try { const result = await getDataFromDir(__dirname); console.log(result); // 给客户端返回响应,避免请求挂起 res.end(JSON.stringify(result)); } catch (err) { // 捕获异步错误,防止服务器崩溃 console.error(err); res.writeHead(500); res.end('Server Error'); } }); // 启动服务器(原代码遗漏) server.listen(port, host, () => { console.log(`Server running at http://${host}:${port}/`); });
额外说明
async函数若没有显式返回值,会默认返回Promise.resolve(undefined);只有返回 Promise 或通过await等待异步操作,才能让函数返回预期的异步结果。- 代码中
const src = await fsp.stat(...)变量未被使用,若仅需获取目录下的文件名,可删除该调用以节省性能;若需判断文件/目录类型,可使用src.isFile()/src.isDirectory()处理。
内容的提问来源于stack exchange,提问作者Irina Vinter
相关产品推荐
相关产品推荐

