如何使 fs.readFile 异步等待?

时间:2021-02-01 01:46:01

标签: node.js

我在这里有这个 nodejs 代码,它读取一个文件夹并处理文件。该代码有效。但它仍然是先打印所有文件名,然后才读取文件。如何获取文件然后先读取文件内容而不是先获取所有文件?

async function readingDirectory(directory) {
    try {
        fileNames = await fs.readdir(directory);
        fileNames.map(file => {
            const absolutePath = path.resolve(folder, file);
            log(absolutePath);
            
            fs.readFile(absolutePath, (err, data) => {
                log(data); // How to make it async await here?                
            });
        });
    } catch {
        console.log('Directory Reading Error');
    }
}

readingDirectory(folder);

1 个答案:

答案 0 :(得分:1)

要使用 await,您需要使用 fs.readFile()fs.readdir() 的承诺版本,您可以在 fs.promises 上获得它们,如果您希望它们按顺序运行,请使用for 循环而不是 .map()

async function readingDirectory(directory) {
    const fileNames = await fs.promises.readdir(directory);
    for (let file of fileNames) {
        const absolutePath = path.join(directory, file);
        log(absolutePath);
        
        const data = await fs.promises.readFile(absolutePath);
        log(data);
    }
}

readingDirectory(folder).then(() => {
    log("all done");
}).catch(err => {
    log(err);
});