如何在 Node js 中使用 async/await 和 fs.createReadStream

2024-01-06

我有 Node js 服务,它读取 csv 文件并根据提供的参数过滤记录。我需要等到文件读取处理完成。但它不等待。我尝试使用异步/等待和承诺但没有运气。

如何等待文件处理完毕并返回 json 响应。

app.get('/getEmpInfo/:emailId/:unique_code', async (req,res) => {
    console.log("req.params.emailId :"+req.params.emailId);
    console.log("req.params.unique_code :"+req.params.unique_code);
    const response = await getEmpDetailsByEmailIdAndUniqueCode(req.params.emailId,req.params.unique_code);
    res.send(response)
}); 

async function getEmpDetailsByEmailIdAndUniqueCode(emailId,uniqueCode){
    console.log("inside getEmpDetailsByEmailIdAndUniqueCode()::"+emailId+"::"+uniqueCode);
    var fetchData = [];

    // try 1
/*  await fs.createReadStream(investorFileName1)
      .pipe(csv())
      .on('data', (row) => {
        if(row.unique_code != null && row.unique_code == uniqueCode && row.investor_email_id == emailId) {
            fetchData.push(row);
            console.log(row);
        }
      })
      .on('end', () => {
        console.log('CSV file successfully processed');
        console.log(fetchData);
    }); */

  // try 2
    var response = fs.createReadStream(fileName).pipe(csv());

    return new Promise(function(resolve,reject){
        response.on('end', () => resolve(fetchData));
        response.on('error', reject); 
    })
}

你们非常亲密。只需将您的 2 个实现合并为第三个实现即可:

async function getEmpDetailsByEmailIdAndUniqueCode(fileName,emailId,uniqueCode){
    console.log("inside getEmpDetailsByEmailIdAndUniqueCode()::"+emailId+"::"+uniqueCode);

    return new Promise(function(resolve,reject){
        var fetchData = [];
        fs.createReadStream(fileName)
            .pipe(csv())
            .on('data', (row) => {
                if(row.unique_code != null && row.unique_code == uniqueCode && row.investor_email_id == emailId) {
                    fetchData.push(row);
                    console.log(row);
                }
            })
            .on('end', () => {
                console.log('CSV file successfully processed');
                console.log(fetchData);
                resolve(fetchData);
            })
            .on('error', reject); 
    })
}

请注意,我添加了fileName作为第一个参数,因为我在代码中的任何地方都看不到它的定义。

我也没有测试它,只是将你的代码粘在一起:)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Node js 中使用 async/await 和 fs.createReadStream 的相关文章

随机推荐