Асинхронная функция NodeJS анализирует csv возвращает данные в другой файл

#node.js #async-await #puppeteer #node-csv-parse

#node.js #асинхронный -ожидание #кукловод #узел-csv-parse

Вопрос:

Я создаю небольшой инструмент для внутреннего пользователя с помощью puppeteer.

По сути, я получил файл csv с некоторыми данными, которые я «прочитал» и заполнил форму.

Когда я пытаюсь очистить свой проект для повторного использования, я немного борюсь:

Я создаю имя файла parsecsv.js

 const config = require('../config.json');
const parse = require('csv-parse');
const fs = require('fs');

const processFile = async () => {
    records = []
    const parser = fs
        .createReadStream(config.sourceFile)
        .pipe(parse({
            // CSV options
            from_line: 1,
            delimiter: ";",
        }));
    let i =1;
    for await (const record of parser) {
        records.push(record)
        i  ;
    }
    return records
}

const processFileData = async () => {
    const records = await processFile()
    console.info(records);
    return records
}


module.exports ={
    processFile, processFileData
}
 

в другом файле Js я сделал

 const parseCSV = require('./src/ParseCsv');
const records = parseCSV.processFileData();
const data = parseCSV.processFile();
console.log(typeof records);
console.table(records);
console.log(typeof data);
console.table(data);
 

Но я никогда не получаю свои данные только пустым объектом.
Как я могу получить свои данные, чтобы иметь возможность «поделиться» ими с другой функцией?

Спасибо

Ответ №1:

поскольку ваши функции являются асинхронными и возвращают обещания, вы можете сделать что-то вроде

 const parseCSV = require('./src/ParseCsv');
(async () => {
        const records = await parseCSV.processFileData();
        const data = await parseCSV.processFile();
        console.log(typeof records);
        console.table(records);
        console.log(typeof data);
        console.table(data);
         
          })()
 

Комментарии:

1. спасибо за подсказку! В итоге я сделал это: async function getData() { const records = await parseCSV.processFile(); return records; } const data = getData(); data.then(function(result) { console.table(result); }) и работал как шарм 🙂

2. вы правы ! ваше решение работает (так как сначала не работает, но из-за опечатки на моей стороне …) Оба работают, но сохранят ваш как «более короткий» 🙂