Как мне вернуть данные из fs.createReadStream() с помощью парсера csv

У меня есть эта функция

function getData(file, type) {
    let data = [];
    fs.createReadStream(file)
        .pipe(csv({headers: false, separator: ';',}))
        .on('data', (row) => {
            let item = {
                date: row[0],
                value: row[1]
            };
            let item2 = {
                date: moment(row[0], "DD-MM-YYYY HH:mm").add(30, "minutes").format("DD/MM/YYYY HH:mm"),
                value: row[2]
            };
            data.push(item);
            data.push(item2);
        })
        .on('end', () => {
           return data;
        });
}

и я хотел бы вернуть 9X_node.js данные, проанализированные в CSV, но когда 9X_nodejs я возвращаю данные в методе .on, данные пусты.

Как 9X_nodejs мне это сделать?

3
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Как мне вернуть данные из fs.createReadStream() с помощью парсера csv

Я бы посоветовал использовать подход, основанный 9X_node.js на обещаниях, вы можете вернуть обещание 9X_io.js из функции getData, а затем разрешить или 9X_nodejs отклонить в зависимости от ситуации.

Это 9X_nodejs значительно упрощает работу вызывающей функции.

Например:

function getData(file, type) {
    let data = [];
    return new Promise((resolve, reject) => {
        fs.createReadStream(file)
            .on('error', error => {
                reject(error);
            })
            .pipe(csv({headers: false, separator: ';',}))
            .on('data', (row) => {
                let item = {
                    date: row[0],
                    value: row[1]
                };
                let item2 = {
                    date: moment(row[0], "DD-MM-YYYY HH:mm").add(30, "minutes").format("DD/MM/YYYY HH:mm"),
                    value: row[2]
                };
                data.push(item);
                data.push(item2);
            })
            .on('end', () => {
                resolve(data);
            });
    });
}

async function testGetData() {
    try { 
        const data = await getData("test.csv", {});
        console.log("testGetData: parsed CSV data:", data);
    } catch (error) {
        console.error("testGetData: An error occurred: ", error.message);
    }
}

testGetData();

11
0