csv-解析器.on('end') nodeJS
csv-parser .on('end') nodeJS
我有这个函数 bd()
应该 return 文件中读取的所有数据的数组 groupes.csv
稍后将对其进行处理 :
function bd() {
const birthdays = [];
fs.createReadStream('./data/groupes.csv')
.pipe(csv({}))
.on('data', (data) => birthdays.push(data))
.on('end', () => {
console.log(birthdays)
});
}
控制台确实显示生日数组,我的问题是return它。
我想要这个函数 return 生日数组。我还没有成功。
当我将 return 语句放在 .on('end') 块中时,它不起作用(出于某种原因)[也许 return 语句应该在fs.read] 如果我这样做(将其放在 .on('end') 块之后),即使在使用 while 循环等待它完成后,数组似乎还是空的。
我链接了旧的 post,但您似乎没有理解代码的根本问题。
.on()函数是用来告诉程序调用其中的函数当事件被调用时,在本例中是结束,那么我们如何应用这是你写的代码?
您的 .on('end', () => {});
中的函数在完成读取后立即被调用,因此当此回调被调用时您的生日数组将被填充。
这将导致代码能够继续 运行 即使流尚未完成,并且在它将您的生日数组打印到控制台时,生日数组尚未完成开始有人居住。
那么我们该如何解决这个问题?
简单:我们使用所谓的承诺。
承诺就是你所想的那样。
这是一个承诺,此功能将 return 稍后 一些东西 并承诺在可用时提供该数据。
下面是使用 promise 时函数的外观示例:
function bd() {
return new Promise((resolve, reject) => {
const birthdays = [];
fs.createRedStream('./data/groupes.csv')
.pipe(csv({}))
.on('data', (data) => birthdays.push(data))
.on('end', () => {
resolve(birthdays);
});
});
}
那么这里到底发生了什么?
我们创建了一个新的 promise 对象并向其中传递了一个新的回调参数,其中包含我们函数的原始代码以及从回调中获取 2 个参数。这两个函数是我们用于错误处理 (.catch()
) 和实现我们对 return 数据或我们的 resolve 函数做出的承诺。
这个resolve函数基本上就是我们用来代替return的。
那么我们稍后如何在代码中使用 promise?
我们使用 .then() 函数,只要承诺得到解决,该函数就会被调用。
bd().then((birthdays) => {
/* Code */
});
如果您不了解 Promise 工作原理的核心概念,那么我可以向您保证(双关语)js 可能会成为您的问题。我建议您不要只接受提供的代码,而是尝试了解它是如何工作的。
您可以阅读更多关于承诺如何在 MDN
上运作的信息
我有这个函数 bd()
应该 return 文件中读取的所有数据的数组 groupes.csv
稍后将对其进行处理 :
function bd() {
const birthdays = [];
fs.createReadStream('./data/groupes.csv')
.pipe(csv({}))
.on('data', (data) => birthdays.push(data))
.on('end', () => {
console.log(birthdays)
});
}
控制台确实显示生日数组,我的问题是return它。
我想要这个函数 return 生日数组。我还没有成功。
当我将 return 语句放在 .on('end') 块中时,它不起作用(出于某种原因)[也许 return 语句应该在fs.read] 如果我这样做(将其放在 .on('end') 块之后),即使在使用 while 循环等待它完成后,数组似乎还是空的。
我链接了旧的 post,但您似乎没有理解代码的根本问题。
.on()函数是用来告诉程序调用其中的函数当事件被调用时,在本例中是结束,那么我们如何应用这是你写的代码?
您的 .on('end', () => {});
中的函数在完成读取后立即被调用,因此当此回调被调用时您的生日数组将被填充。
这将导致代码能够继续 运行 即使流尚未完成,并且在它将您的生日数组打印到控制台时,生日数组尚未完成开始有人居住。
那么我们该如何解决这个问题? 简单:我们使用所谓的承诺。
承诺就是你所想的那样。 这是一个承诺,此功能将 return 稍后 一些东西 并承诺在可用时提供该数据。
下面是使用 promise 时函数的外观示例:
function bd() {
return new Promise((resolve, reject) => {
const birthdays = [];
fs.createRedStream('./data/groupes.csv')
.pipe(csv({}))
.on('data', (data) => birthdays.push(data))
.on('end', () => {
resolve(birthdays);
});
});
}
那么这里到底发生了什么?
我们创建了一个新的 promise 对象并向其中传递了一个新的回调参数,其中包含我们函数的原始代码以及从回调中获取 2 个参数。这两个函数是我们用于错误处理 (.catch()
) 和实现我们对 return 数据或我们的 resolve 函数做出的承诺。
这个resolve函数基本上就是我们用来代替return的。
那么我们稍后如何在代码中使用 promise?
我们使用 .then() 函数,只要承诺得到解决,该函数就会被调用。
bd().then((birthdays) => {
/* Code */
});
如果您不了解 Promise 工作原理的核心概念,那么我可以向您保证(双关语)js 可能会成为您的问题。我建议您不要只接受提供的代码,而是尝试了解它是如何工作的。
您可以阅读更多关于承诺如何在 MDN
上运作的信息