Nodejs - переменная, инициализированная внутри функции, вне ее - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть модуль 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, поэтому я не мог понять это, какие-либо идеи?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вероятно, вам следует дождаться запуска асинхронной функции, прежде чем вы получите доступ к переменной (или удалите async). Изменить: И вы никогда не позвоните loadUserDB, по крайней мере, не в этом коде. Я предлагаю вместо использования переменной с более широкой областью действия просто await результат вашей функции.

0 голосов
/ 20 февраля 2020
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.

Опять же, у вас будет неопределенное значение userDB в момент импорта и до выполнения loadUserDB , Этот модуль (файл) запускается только один раз в этой форме.

После вызова 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...