ReadStream 管道完成后执行循环
Execute Loop after ReadStream pipe has finished
不确定标题是否完全正确,因为我很困惑(在我的头上)...
我正在尝试从 csv 中提取 headers,作为自动化测试的一部分,以验证那些 headers。我正在使用 csv-parse 读取 csv 文件。
一旦我收集了headers,我就会做一个简单的断言来检查并针对每个断言。使用我在测试脚本中输入的字符串值。
但是目前,FOR 在 csv 读取和 headers 收集之前执行。我不确定如何在执行循环之前等待它完成。
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]);
}
解决方案是 运行 for
循环和 'headers'
事件处理程序中的断言,例如:
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)
})
不确定标题是否完全正确,因为我很困惑(在我的头上)...
我正在尝试从 csv 中提取 headers,作为自动化测试的一部分,以验证那些 headers。我正在使用 csv-parse 读取 csv 文件。
一旦我收集了headers,我就会做一个简单的断言来检查并针对每个断言。使用我在测试脚本中输入的字符串值。
但是目前,FOR 在 csv 读取和 headers 收集之前执行。我不确定如何在执行循环之前等待它完成。
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]);
}
解决方案是 运行 for
循环和 'headers'
事件处理程序中的断言,例如:
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)
})