【问题标题】:Execute Loop after ReadStream pipe has finishedReadStream 管道完成后执行循环
【发布时间】:2021-02-28 19:24:20
【问题描述】:

不确定标题是否完全正确,因为我非常难过(在我的头上)......

我正在尝试从 csv 中提取标头,作为自动化测试的一部分,以验证这些标头。我正在使用 csv-parse 来读取 csv 文件。

一旦我收集了标题,我就会做一个简单的断言来检查每个标题。使用我在测试脚本中输入的字符串值。

但是目前,FOR 是在 csv 读取和标头收集之前执行的。我不确定在执行循环之前如何等待它完成。

const fs = require('fs');
const csv = require('csv-parser');
let headerArray = null;
const headerValues = values.split(',');
browser.pause(10000);
fs.createReadStream(""+global.downloadDir + "\\" + fs.readdirSync(global.downloadDir)[0])
  .pipe(csv())
  .on('headers', function (headers) {
    return headerArray = headers
  })
for(var i =0; i<headerValues.length; i++){
 assert.equal(headerValues[i], headerArray[i]);
}

【问题讨论】:

    标签: node.js node-csv-parse


    【解决方案1】:

    解决方案是在'headers' 事件处理程序中使用您的断言运行for 循环,例如:

    var results = [] // we'll collect the rows from the csv into this array
    
    var rs = fs.createReadStream(""+global.downloadDir + "\\" + fs.readdirSync(global.downloadDir)[0])
      .pipe(csv())
      .on('headers', function (headers) {
        try {
          for(var i =0; i<headerValues.length; i++){
            assert.equal(headerValues[i], headers[i]);
          }
        } catch (err) {
          // an assertion failed so let's end
          // the stream (triggering the 'error' event)
          rs.destroy(err)
        }
      }).on('data', function(data) {
        results.push(data)
      }).on('end', function() {
        //
        // the 'end' event will fire when the csv has finished parsing. 
        // so you can do something useful with the `results` array here...
        //
      }).on('error', function(err) {
        // otherwise, the 'error' event will have likely fired.
        console.log('something went wrong:', err)
      })
    

    【讨论】:

    • 欣赏这个,可以看到它实际上是在执行断言!谢谢!但是,当断言没有通过时,它现在不会正确“失败”。会话保持打开状态。你知道我将如何结束直播并完全关闭它吗?
    • 如果发现断言错误,我们必须手动关闭可读流。请注意,可读流现在是如何分配给一个名为 rs 的变量的,我们以后可以使用它。
    • 该死的家伙!谢谢!!也感谢那里的cmets,提供大量帮助!编辑:可悲的是,这似乎无法解决我的问题,但我认为这可能是 webdriver 问题而不是这段代码。由于浏览器会话似乎没有像通常那样关闭失败。即使控制台输出显示浏览器已关闭。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 2015-06-20
    • 2015-03-04
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2023-04-11
    相关资源
    最近更新 更多