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

时间:2019-11-03 07:13:54

标签: javascript node.js async-await node-modules fs

我编写以下代码以从文件中读取数据并推入数组。但是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
}

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

编辑:更改部分代码以使用await。但是第一次迭代后循环中断而没有给出任何错误,都不会打印出我的attchments.length。

编辑2:问题已解决。调用函数也应该等待。谢谢大家。

2 个答案:

答案 0 :(得分:3)

之所以发生这种情况,是因为在这种情况下也应等待run(), 参见async function

一种方法是使用IIFE

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

答案 1 :(得分:1)

调用async函数时,它将返回一个诺言,该诺言最终将使用该函数返回的值来解决(或拒绝,并从该函数内部抛出未捕获的异常)。

因此,您正在尝试记录run ()函数完成之前的附件数量。这就是您需要的:

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