我有 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(使用前将#替换为@)