Node.js 如何使节点fs与类异步/等待?

Node.js 如何使节点fs与类异步/等待?,node.js,asynchronous,fs,Node.js,Asynchronous,Fs,我在制作一个可以异步的解析器时遇到了困难。我要么得到承诺的回报,要么得到未定义的回报。在线阅读了一些文档之后,我非常确定我需要设置一个try/catch块,但是我不知道fs.readFile方法在哪里。任何帮助都将不胜感激 const fs = require('fs') class CSV { constructor (fileName, buffer) { this.fileName = fileName; this.buffer = buffer;

我在制作一个可以异步的解析器时遇到了困难。我要么得到承诺的回报,要么得到未定义的回报。在线阅读了一些文档之后,我非常确定我需要设置一个try/catch块,但是我不知道fs.readFile方法在哪里。任何帮助都将不胜感激

const fs = require('fs')
class CSV {
    constructor (fileName, buffer) {
        this.fileName = fileName;
        this.buffer = buffer;
    }

    async parseCSV () {
        let csv = this.fileName
        let buff = this.buffer
        let stream = await fs.readFile(csv, buff, (err, data) => {
            if (err) console.log(err)
            data = data.split('\r').toString().split('\n')
            this.returnData(data)
        })
        return stream
    }

    returnData(data) {
        return data
    }
}

let test = new CSV('./topsongs.csv', 'utf8')
let data = await test.parseCSV()
console.log(data)

module.exports = CSV
wait操作符用于等待承诺。它只能在异步函数中使用。

fs.readFile
不返回承诺,您需要一个承诺包装器。您可以:

  • 使用内置的
    util.Promisify
    手动提示

    const fs = require('fs');
    const promisify = require('util').promisify;
    const readFile = promisify(fs.readFile);
    
    let stream;
    try {
      stream = await fs.readFile(csv, buff); // callback omitted, `data` param returned instead
    } catch (err) {
      console.log(err);
    }
    
  • 放入第三方本机fs替换库,如

  • const fs = require('fs-extra');
    
    let stream;
    try {
      stream = await fs.readFile(csv, buff);
    } catch (err) {
      console.log(err);
    }