我有一个nodejs模块,它应该将csv文件转换为json,然而,应该保存json数组的变量在函数外未定义,即使它在函数外声明。
const csvFilePath='data.csv'
const csv=require('csvtojson')
let userDB;
const loadUserDB = async() => {
userDB = await csv().fromFile(csvFilePath);
console.log(userDB[0]);
return userDB;
};
console.log(userDB[0]);
module.exports = {
loadUserDB,
userDB
}
我是nodejs的新手,所以我想不通,有什么想法吗?
在访问变量(或删除async
(之前,您可能应该等待异步函数运行。编辑:而且你从来没有调用过loadUserDB
,至少在这个代码中没有。我建议,与其使用范围更广的变量,不如简单地将函数的结果await
。
const csvFilePath='data.csv'
const csv=require('csvtojson')
let userDB;
const loadUserDB = async() => {
userDB = await csv().fromFile(csvFilePath);
console.log(userDB[0]);
return userDB;
};
// here this always be undefined - why?
// when the index.js file import this module, this file going to run line by line,
// means first the program just registers the userDB and the loadUserDB variables
// without of course executing the function
// so basically this files run in this form only once
// this console.log never going to run after the loadUserDB
console.log(userDB[0]);
module.exports = {
loadUserDB,
userDB
}
我的建议是看看JavaScript中的作用域和闭包是如何工作的。
同样,您将在导入时和执行loadUserDB
之前未定义userDB
。此模块(文件(在此表单中只运行一次。
在调用loadUserDB
之后,userDB
假设具有除undefined之外的其他值。
所以,是的,这个值并不总是未定义的,只是你想访问它的时间问题
const path = require('path');
const csvFilePath = path.join(__dirname, './data.csv')
const csv = require('csvtojson')
let userDB;
const loadUserDB = async() => {
userDB = await csv().fromFile(csvFilePath);
};
module.exports = {
loadUserDB,
userDB
}