Node.js Can';不要让NodeJS向可写流写入任何内容

Node.js Can';不要让NodeJS向可写流写入任何内容,node.js,Node.js,在命令行上本地运行NodeJS(v8.16.2)。我抓取一个电子商务网站,将相关信息收集到一个数据结构中,然后尝试通过创建写入流手动将其写入纯文本CSV文件(我的记录没有固定的字段集)。这最后一步不起作用 // Other stuff const exitHandler = function(options, exitCode) { if (exitCode || exitCode !== 0) console.log(exitCode); // Other stuff

在命令行上本地运行NodeJS(
v8.16.2
)。我抓取一个电子商务网站,将相关信息收集到一个数据结构中,然后尝试通过创建写入流手动将其写入纯文本CSV文件(我的记录没有固定的字段集)。这最后一步不起作用

// Other stuff

const exitHandler = function(options, exitCode) {
    if (exitCode || exitCode !== 0) console.log(exitCode);
    // Other stuff
    writeToCsv();
    if (options.exit) process.exit();
}

const writeToCsv = function() {
    let ws = fs.createWriteStream('./final-data.csv');
    const crlf = '\n\r'; // might need to reverse this

    // Please ignore the weird layout
    for (let seller in finalData.sellers) {
        ws.write('Seller:,' + seller + crlf + ',Brands:');
        for (let brand of finalData.sellers[seller].brands) {
            ws.write(',' + brand);
        }
        ws.write(crlf + ',Addresses:');
        for (let addr of finalData.sellers[seller].addrs) {
            ws.write(',"' + addr + '"');
        }
        ws.write(crlf);
    }
    ws.on('finish', () => {
        console.log('Wrote all data'); // never prints this
    });
    ws.end();
}

process.on('exit', exitHandler.bind(null,{cleanup:true}));
我怀疑这是因为NodeJS在数据刷新到磁盘之前就退出了,但无法找到一种方法使NodeJS同步刷新数据


PS:NodeJS的新成员

请查看下面的示例并将其集成 根据你的评论,我更新了代码

async function writeDataInCSV(filePath, dynamicHeader, data) {
    const csvWriter = createCsvWriter({
      path: filePath,
      header: dynamicHeader
    });
    await csvWriter
      .writeRecords(data)
      .then(()=> console.log('The CSV file was written successfully'));
} 

writeDataInCSV('out.csv',dynamicHeader, Data)

这里设置标题数组并生成数据并传递给WriteDaintCSV方法

尝试
异步函数(选项,exitCode)
等待writeToCsv()添加ws.on('error',函数(err){console.log(err);});要检查到底是什么错误?@AbhishekSingh没有打印任何内容。@DaniyalLukmanov没有工作…当进程退出时,您正在运行代码(exitHandler)。我不认为它会像这样工作?当计算finalData时,您应该调用writeToCsv函数。我没有固定字段。我有多值字段(每个卖家都有一套
品牌和一套
地址)。我还没有真正尝试过这段代码,但我看到过类似的东西,也不确定它是如何工作的。因此,请使用类似WriteDaincv(filePath,dynamicHeader,data)``异步函数WriteDaincv(filePath,dynamicHeader,data){const csvWriter=createCsvWriter({path:filePath,header:dynamicHeader});等待csvWriter.writeRecords(数据)。然后(()=>console.log('CSV文件已成功写入');}```