NodeJS 读取多个文件阻塞并返回快速响应



我正在检索一个路由,然后我正在从目录中获取我需要的所有json文件。

我需要通过键值将所有这些 json 文件合并到一个 json 对象中,其中键是文件名,值是文件内容。

我需要使其异步,因为如果没有,响应将在文件系统完成其工作之前发送,并且我将有一个空的 json 对象响应。

我尝试将Promise.allawait一起使用:

app.route("/pull").get(async function(req, res) {
fs.readdir(path, async (error, files) => {      
if (error) {
console.log("Could not load files. ", error.message);
res.sendStatus(500);
}
else {
let json = {};
json = await Promise.all(
files.map(async (fileName, index) => {
return await fs.readFile(path + fileName, 'utf-8', (err, content) => {
return {key: fileName, value : JSON.parse(content)}
});
})
);
res.status(200).json(json);
}
});
});

我收到[null]作为回应,我错过了什么?

路由处理程序不会等待fs.readdir完成其回调。你需要像这样承诺readdir

import fs from 'fs';
import {promisify} from 'util';
const readdir = promisify(fs.readdir);

然后在处理程序中:

{error, files} = await readdir(...)
...

最新更新