在createeadstream函数中等待,而不是将获取的数据推入数组,而是进入下一次迭代并再次获取



这里我试图调用csv文件中的每一行,并在"。on"我们可以访问每一行我在这里取一些数据然后把取到的数据推入数组但我看到它调用了fetch然后直接到下一行而不是把数据推入数组。有人知道为什么它不把数据压入数组然后再进行下一次迭代吗?

var dataArray = [];
fs.createReadStream('./data.csv')
.pipe(csv())
.on('data', async function (row) {
let data = await fetch(row.data);
console.log(data);
row.flag = data;
dataArray.push(row);
})
.on('end', async function () {
console.log('data', dataArray);
var result = json2csv(dataArray);
fs.writeFileSync('./file.csv', result);
});

我是这样做的:首先将所有行数据表单推入("data")在createstream内部进入数组" ar"。然后按照@ChrisG的建议,创建了一个名为promise的数组,并将所有的promise放入数组中。最后称为promises .all(promises[])。然后我得到了我想要的。@Bravo

let arr = [];
let promises = []
fs.createReadStream(path)
.pipe(csv())
.on('data', async function (row) {
arr.push(row)

})
.on('end',  function () {
console.log("data",arr.length)
arr.forEach(async e => {
let msg
dataArray.push(e)

promises.push(fetch(msg))

}
})
Promise.all(promises).then((data) => {
console.log("data",dataArray)   
data.forEach((e, index) => {
let data = e.data
dataArray[index].data = data
})
var result = json2csv(dataArray);
fs.writeFileSync(path, result)

})
})


}

最新更新