首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等到Filestream完成

等到Filestream完成
EN

Stack Overflow用户
提问于 2021-07-15 18:48:36
回答 1查看 248关注 0票数 1

我试着想办法解决这个问题:

我有一个函数,它读取csv,将其保存到数组中,然后返回数组。我的问题是:在尝试返回数组之前,它总是返回一个空数组,因为filestream还没有完成。

代码语言:javascript
复制
const parser = require("csv-parser");
const fs = require("fs");

class CsvConverter {

    constructor() {}

    convert(filePath) {
        console.log(this.getRawCsv(filePath));
        [...]
    }

    getRawCsv(filePath) {
        const results = [];
        fs.createReadStream(filePath)
            .pipe(parser())
            .on("data", (data) => results.push(data));
//          .on("end", () => {});
        return results;
    }
    [...]
}

module.exports = CsvConverter;

我已经尝试过使用.on("end", () => {});回调,但无法找到在回调函数中返回结果数组的方法。

使用承诺和异步/等待功能对我来说也没有用,但原因可能是我对这个功能太缺乏经验了。

谢谢你的帮助和可能的解决方案:)

你好,安德烈亚斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 20:05:12

由于getRawCsv函数是异步的,所以转换函数将在createFileStream函数之前完成。您可以将流包装成一个承诺,然后等待它完成。我把你的例子缩略了一点。

代码语言:javascript
复制
const {createReadStream} = require('fs');

class CsvConverter {

    constructor() {}

    async convert(filePath) {
        const raw = await this.getRawCsv(filePath)
        console.log(raw)
    }

    getRawCsv(filePath) {
        const results = [];
        return new Promise((resolve, reject) => {
            createReadStream(filePath, {encoding: 'utf8'})
                .on('data', data => {
                    results.push(data)
                })
                .on('end', () => {
                    resolve(results);
                })
                .on('error', (err) => {
                    reject(err);
                });
        });
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68399311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档