ynjay Ответов: 1

Array.push не сохраняет с помощью csvtojson


Я использую библиотека csvtojson чтобы преобразовать csv-файл в объект json, а затем нажать на массив. Однако, когда я консолью.log(data) массив, он пуст, но когда я консолью.log(data) в csv({}) он показывает массив с jsonobj внутри.

Большое спасибо!

Что я уже пробовал:

Я пробовал использовать функцию async/await, но у меня все еще возникают проблемы с сохранением данных.
const csvFilePath = 'myCsv.csv'; 
let data = [];
async function convertCsv(csvData) {
    const jsonArray= await csv({noheader: true, headers: headers}).fromFile(csvData).on('json', (jsonObj) => { 
    
        data.push(jsonObj); // Push each object to data Array
        console.log('data',data);
        
    })
    return jsonArray;
}

async function run() {
    let dat = await convertCsv(csvFilePath).then(dat => data.push(dat))
    return dat;
  }
  
  run()
console.log(data);

1 Ответов

Рейтинг:
9

Richard Deeming

Цитата:
async function run() { ... }

run();
console.log(data);
Вы регистрируете данные до функция завершила выполнение.
асинхронная функция - JavaScript | MDN[^]

Вам нужно дождаться завершения работы функции, прежде чем вы сможете получить доступ к ее выходным данным. Самый простой способ сделать это-переместить ваш console.log линия внутри async функция:
async function run(){
    let dat = await convertCsv(csvFilePath);
    data.push(dat);
    console.log(data);
    return dat;
}

run();


ynjay

Большое спасибо! Есть ли способ сохранить данные в переменной вне функции, чтобы я мог использовать их в других частях кода?

Richard Deeming

Ты уже это делаешь. Но вы не можете получить доступ к данным до того, как они будут назначены, а это значит, что вам нужно подождать, пока они будут назначены. async функция, чтобы закончить работу в первую очередь.