#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. вы правы ! ваше решение работает (так как сначала не работает, но из-за опечатки на моей стороне …) Оба работают, но сохранят ваш как «более короткий» 🙂