首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CSV中的数据保存到全局变量中(fast-csv/papaparse)

将CSV中的数据保存到全局变量中(fast-csv/papaparse)
EN

Stack Overflow用户
提问于 2021-06-24 21:05:52
回答 1查看 221关注 0票数 0

我是js的新手,正在尝试使用node.js在后端解析CSV。

我有一个状态数组,我想在其中存储CSV列的数据。这是我使用fast-csv编写的一个非常简单的代码。但是每当我运行代码时,我都会得到一个空数组[]。我试着用papaparse做同样的事情,也得到了同样的结果。

代码语言:javascript
复制
const csv = require('fast-csv')
const file = fs.createReadStream('main.csv');
var states = []
file
    .pipe(csv.parse({ headers: false }))
    .on('data', row => states.push(row[2]))
console.log(states)

但是每当我通过控制台登录,然后.on('end')阻塞,这些值就会被记录下来。

代码语言:javascript
复制
const csv = require('fast-csv')
const file = fs.createReadStream('main.csv');
var states = []
file
    .pipe(csv.parse({ headers: false }))
    .on('data', row => states.push(row[2]))
    .on('end', () => console.log(states) // This works
console.log(states) // This doesn't

我认为这是由于解析器异步工作造成的。我试图解析promises并使用async/await方法,但我不能在全局范围内使用解析的内容。

希望在这件事上能帮上忙。

EN

回答 1

Stack Overflow用户

发布于 2021-06-24 21:28:27

你说得对,解析器异步工作。因此,它开始解析并在事件上使用回调(在你的例子中是‘data’,'end‘)。但解析器之后的代码将在解析器开始工作后立即执行。所以你对解析数据的所有操作都应该在'end‘事件回调中完成。

代码语言:javascript
复制
// function to start parser
const startParsing = (res) => {
  const csv = require('fast-csv')
  const file = fs.createReadStream('main.csv');
  // you may use const cos it's type won't be changed
  const states = []
  file
    .pipe(csv.parse({ headers: false }))
    .on('data', row => states.push(row[2]))
    // execute function after parsing.
    .on('end', () => outputData(states, res));
};

const outputData = (states, res) => {
  // your next actions here
  console.log(states);
  // for example, res.send(states) or anything to complete server response if it's accessible
  res.send(states);  
};

// then, in any place you need use this startParsing function, for example
server.get('/parser', (req, res) => {
  startParsing(res);
});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68116381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档