【问题标题】:Appending array values to csv将数组值附加到 csv
【发布时间】:2020-03-01 22:27:01
【问题描述】:

我想获取一些输出并将输出附加到 csv

这是我目前的代码:

async function writeData() {
    const csv = require('csv-parser')
    const results = [];
    fs.createReadStream('C:\\Users\\User\\Documents\\testingclean.csv')
        .pipe(csv())
        .on('data',(data)=> results.push(data))
        .on('end', async () => {
            const cookieJar = await getCookieJar();
            const promises = [];
            results.forEach((data) => {
                promises.push(boxrec.getPersonById(cookieJar,data.id));
            })
            try {
                const fighters = await Promise.all(promises);
                fighters.forEach((fighter)=>{
                    boxer = JSON.parse(JSON.stringify(fighter.output));
                    fs.appendFile('C:\\Users\\User\\Documents\\newtest.csv',boxer, (err) => {
                        if (err) console.error('Could not append data to csv');
                        console.log('Data successfully appended');
                    })
                });
            } catch (e) {
                console.log(e);
            }
        })
};
try {
    writeData();
} catch (error) {
    console.log("Error in writeData: " + error);
}

但是运行此代码不会产生所需的 csv 输出。

我专门写信给 csv,因为我读到我不能追加到 json(理想情况下希望将数据写入 json)

【问题讨论】:

  • 使用 try-catch 块来捕获 Promise 拒绝错误。然后用特定错误更新答案。在end 事件回调中创建try-catch。
  • fs.createReadStream 需要 catch 块。或 on('error', ()=>{}) 。看看这个nodejs.org/en/knowledge/advanced/streams/…
  • @Dijkstra 编辑了我的答案

标签: node.js json csv


【解决方案1】:

如果您没有将任何内容写入 CSV 文件,则应在程序结束时明确关闭它:

var readsteam = fs.createReadStream();
...
readStream.destroy();

不确定,但这应该是完整的代码:

async function writeData() {
    const csv = require('csv-parser')
    const results = [];
    var readsteam = fs.createReadStream('C:\\Users\\User\\Documents\\testingclean.csv');
    readsteam
        .pipe(csv())
        .on('data',(data)=> results.push(data))
        .on('end', async () => {
            const cookieJar = await getCookieJar();
            const promises = [];
            results.forEach((data) => {
                promises.push(boxrec.getPersonById(cookieJar,data.id));
            })
            try {
                const fighters = await Promise.all(promises);
                fighters.forEach((fighter)=>{
                    boxer = JSON.parse(JSON.stringify(fighter.output));
                    fs.appendFile('C:\\Users\\User\\Documents\\newtest.csv',boxer, (err) => {
                        if (err) console.error('Could not append data to csv');
                        console.log('Data successfully appended');
                    })
                });
            } catch (e) {
                console.log(e);
            }
        }
    readsteam.destroy();
};
try {
    writeData();
} catch (error) {
    console.log("Error in writeData: " + error);
}

【讨论】:

  • 应该出现在 promises.push 行之后还是 fs.appendFile 之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多