关于事件流mapSync的承诺不起作用

问题描述

当前,我正在尝试创建一个可以处理非常大的CSV文件的CSV阅读器。我选择使用事件流NPM包进行流式实施。

我创建了一个getNextp()函数,该函数应返回一个promise并在每次调用它时给我下一个数据。

"use strict";
const fs = require('fs');
const es = require('event-stream');
const csv = require('csv-parser');

class CsvFileReader {
  constructor(file) {
    this.file = file;
    this.isstreamReading = false;
    this.stream = undefined;
  }

  getNextP() {
    return new Promise( (resolve) => {
      if (this.isstreamReading === true) {
          this.stream.resume();
      } else {
        this.isstreamReading = true;
  
        // Start reading the stream.
        this.stream = fs.createReadStream(this.file)
        .pipe(csv())
        .pipe(es.mapSync( (row) => {

          this.stream.pause();
          resolve(row);  
        }))
        .on('error',(err) => {
          console.error('Error while reading file.',err);
        })
        .on("end",() => {
          resolve(undefined);
        })
      }
    });
  }
}

然后我用这段代码称呼它。

const csvFileReader = new CsvFileReader("small.csv");
setInterval( () => {
  csvFileReader.getNextP().then( (frame) => {
    console.log(frame);
  })
},1000);

但是,每次我尝试时,我只会得到第一行,而我不会得到后续的行。我不知道为什么这不起作用。我已经尝试过使用一个好的旧回调函数进行同样的操作,然后它可以正常工作。

更新: 所以我基本上想要的是一个函数(getNext()),每次我将其称为CSV的下一行时,它都会返回我。某些行可以缓冲,但是是的,直到现在,我仍无法弄清楚如何使用流。因此,如果有人可以给我一个如何创建正确的getNext()函数的指针,那将是很棒的。

我想问问是否有人了解这里出了什么问题,并恳请分享他/她的知识。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...