[英]Promises and Async/Await don't seem to do anything in Express/node
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我正在学习节点和表达,我正在尝试实现一个 function,它从用户上传的 csv 文件中检索数据。 数据应该先处理然后输出到控制台,但它在处理之前输出一个空数组。 我按照我在网上找到的教程中的异步/等待示例进行操作,但问题仍然存在,我不确定如何继续。
app.on("event:file_uploaded", async(userDataPath)=>{
let result = await retrieveDataFromCsvFile(userDataPath);
console.log(result); //should be completed after retrieving data
});
function retrieveDataFromCsvFile(path){
return new Promise((resolve)=>{
console.log(`RETRIEVING DATA FROM: ${path}`);
const stream = fs.createReadStream(path);
const rl = readline.createInterface({input: stream});
let data = [];
rl.on("line", (row)=>{
data.push(row.split(","));
})
rl.on("close", ()=>{
console.log("Data Processed"); //should be completed first
})
resolve(data);
})
}
输出:
RETRIEVING DATA FROM: <filepath>
[]
Data Processed
当你有你想要的数据时,你需要调用resolve
。
此刻你是:
line
事件处理程序close
事件处理程序resolve
一段时间后,您将获得触发各自事件处理函数的line
和close
事件……但到那时您已经解决了 promise。
您需要确定什么条件意味着您的数据已准备就绪。 猜测,我希望它是“当close
回调运行时”然后调用resolve
。
如您所见,您的控制台日志顺序错误,因此应该告诉您 promise 首先解析,然后再处理文件。 您应该将关闭事件更改为
rl.on("close", ()=>{
console.log("Data Processed"); //should be completed first
resolve(data);
})
这将确保您的 promise 在 function 处理完文件后得到解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.