Javascript 如何将async/await与节点js中的fs.createReadStream一起使用
我有NodeJS服务,它读取csv文件并根据提供的参数过滤记录。我需要等到文件读取处理完毕。但不是等待。我尝试使用async/Wait和promise,但没有成功 如何等待文件被处理并返回json响应Javascript 如何将async/await与节点js中的fs.createReadStream一起使用,javascript,node.js,Javascript,Node.js,我有NodeJS服务,它读取csv文件并根据提供的参数过滤记录。我需要等到文件读取处理完毕。但不是等待。我尝试使用async/Wait和promise,但没有成功 如何等待文件被处理并返回json响应 app.get('/getEmpInfo/:emailId/:unique_code', async (req,res) => { console.log("req.params.emailId :"+req.params.emailId); console.log("req
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);
})
}
你很接近。只需将两个实现合并到第三个实现中: 异步函数GetEmpDetailsByMaildAndUniqueCode(文件名、电子邮件ID、唯一代码){ log(“GetEmpDetailsByMaildAndUniqueCode()::”+emailId+::“+uniqueCode内部”); 返回新承诺(功能(解决、拒绝){ var fetchData=[]; fs.createReadStream(文件名) .pipe(csv()) .on('数据',(行)=>{ if(row.unique\u code!=null&&row.unique\u code==uniqueCode&&row.investor\u email\u id==emailId){ fetchData.push(行); 控制台日志(行); } }) .on('end',()=>{ console.log('CSV文件已成功处理'); console.log(fetchData); 解析(获取数据); }) .on('错误',拒绝); }) } 注意,我添加了
fileName
作为第一个参数,因为我在代码中的任何地方都看不到它的定义
我也没有测试它,只是把代码粘在一起:)。请使用下面的代码
const getEmpDetailsByEmailIdAndUniqueCode = () => {
return new Promise((resolve, reject) => {
const fetchData = [];
let stream = fs.createReadStream(investorFileName1);
stream.on("error", err => reject(err));
stream.on('data', (row) => {
if(row.unique_code != null && row.unique_code == uniqueCode &&
row.investor_email_id == emailId) {
fetchData.push(row);
console.log(row);
}
})
stream.on("end", () => resolve(fetchdata));
});
}
如果您想为每个请求检查同一个文件,那么最好只解析一次数据并将其保存在某个变量中,而不是反复读取该文件?