Await不是在等待从文件中读取数据吗



我编写以下代码从文件中读取数据并推入数组。但是attachments.length是先打印0,然后加载并打印数据。

const fs=require('fs');
const util=require('util');
const files=['t1.csv','t2.csv','t3.csv'];
async getdata(){
const read=util.promisify(fs.readFile);
let attachments = [];
async function run(file){
let data=await read(file);
attachments.push(data);
} 
for(let file of files){
await run(file);
}
console.log(attachments.length);//should print 3
}

如何先加载数据,然后正确推送。

编辑:将代码的某些部分更改为使用wait。但第一次迭代后循环中断,没有给出任何错误,也没有打印我的attchments.length.

编辑2:问题已解决。调用函数也应该需要等待。谢谢每一个人。

发生这种情况是因为在这种情况下也应该等待run(),参见异步功能

一种方法是使用IIFE:

(async file => {
let data = await read(file);
console.log(data);
attachments.push(data);
})('/home/nadeem/Desktop/test.csv')

当您调用async函数时,它会返回一个promise,该promise最终将使用该函数返回的值进行解析(或通过函数内抛出的未捕获异常进行拒绝(。

因此,您试图在run ()函数完成之前记录附件的数量。以下是您需要的:

run('/home/nadeem/Desktop/test.csv')
.then(() => console.log(attachments.length))

最新更新