Nodejs-在函数内部初始化的变量在函数外部未定义



我有一个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
}

最新更新