MST

星途 面试题库

面试题:Node.js异步编程之文件读取案例分析

在一个Node.js项目中,需要从多个文件中读取数据,然后对这些数据进行合并处理。请描述使用Node.js异步编程(如Promise或async/await)实现此功能的具体步骤,并给出核心代码示例。
38.6万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

具体步骤

  1. 引入必要模块:在Node.js中,使用fs模块来读取文件,path模块用于处理文件路径。
  2. 读取文件内容:利用fs模块的异步读取函数,如fs.readFile,并将其包装为Promise(如果该函数本身不返回Promise),这样可以使用Promise的链式调用或async/await语法。
  3. 合并数据:在读取完所有文件内容后,对这些数据进行合并处理。

核心代码示例(使用Promise)

const fs = require('fs');
const path = require('path');

function readFileAsync(filePath) {
    return new Promise((resolve, reject) => {
        fs.readFile(filePath, 'utf8', (err, data) => {
            if (err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
}

const filePaths = [
    path.join(__dirname, 'file1.txt'),
    path.join(__dirname, 'file2.txt'),
    path.join(__dirname, 'file3.txt')
];

Promise.all(filePaths.map(filePath => readFileAsync(filePath)))
   .then(dataArray => {
        let mergedData = '';
        dataArray.forEach(data => {
            mergedData += data;
        });
        console.log(mergedData);
    })
   .catch(err => {
        console.error(err);
    });

核心代码示例(使用async/await)

const fs = require('fs');
const path = require('path');

function readFileAsync(filePath) {
    return new Promise((resolve, reject) => {
        fs.readFile(filePath, 'utf8', (err, data) => {
            if (err) {
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
}

const filePaths = [
    path.join(__dirname, 'file1.txt'),
    path.join(__dirname, 'file2.txt'),
    path.join(__dirname, 'file3.txt')
];

async function readAndMergeFiles() {
    try {
        const dataArray = await Promise.all(filePaths.map(filePath => readFileAsync(filePath)));
        let mergedData = '';
        dataArray.forEach(data => {
            mergedData += data;
        });
        console.log(mergedData);
    } catch (err) {
        console.error(err);
    }
}

readAndMergeFiles();