繁体   English   中英

Promises 和 Async/Await 似乎在 Express/node 中没有做任何事情

[英]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

此刻你是:

  1. 注册line事件处理程序
  2. 注册close事件处理程序
  3. 呼叫resolve

一段时间后,您将获得触发各自事件处理函数的lineclose事件……但到那时您已经解决了 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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM