簡體   English   中英

Node.js-數組未定義但在控制台上登錄

[英]Node.js - Array undefined but logging on console

我正在嘗試做的是下載一個csv文件,一行一行地讀取它,並將分割的行(在','上)添加到tmparray 此代碼有效並打印數組中的所有元素。

var request = require('request');
var fs = require('fs');
readline = require('readline');
try {
    request('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.csv').pipe(fs.createWriteStream("MyCsv.txt"));
} catch (e) {
    console.error(e);
}
var inputFile = 'MyCsv.csv';
var tmparray;
//read the file
var rd = readline.createInterface({
    input: fs.createReadStream('/home/nome/Node/MyCsv.csv')
});
try {
    //read line by line 
    rd.on('line', (line) => {
        tmparray += line.split(",");

        //print the elements
        tmparray.forEach((element) => {
            console.log(element);
        }, this);
    });
} catch (e) {
    console.error(e);
}

我要做的是在分配陣列后將其打印出來。 我已經試過了:

var request = require('request');
var fs = require('fs');
readline = require('readline');
try {
    request('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.csv').pipe(fs.createWriteStream("MyCsv.txt"));
} catch (e) {
    console.error(e);
}
var inputFile = 'MyCsv.csv';
var tmparray;
//read the file
var rd = readline.createInterface({
    input: fs.createReadStream('/home/nome/Node/MyCsv.csv')
});
try {
    //read line by line 
    rd.on('line', (line) => {
        tmparray += line.split(",");


    });
} catch (e) {
    console.error(e);
} finally {
    console.log(tmparray); // undefined
    // or this: console.log(tmparray[0]) can't read the property '0' of undefined

}

但是將數組打印為好像undefined

問題在於rd.on(...)是異步的。

這意味着您要告訴rd ,當它讀取一行時,應將其添加到tmparray -但這實際上還沒有發生。 稍后, console.log(tmparray) 之后發生。

您應該說rd.on('close', () => console.log(tmparray))告訴Node“完成讀rd 之后,記錄數據”。

代碼中還有其他兩個問題,但是一旦解決,應該更容易找到它們。 看着它,我認為line並不是可讀流上的事件,因此您應該說rd.on('data', ...) 並且您正在嘗試使用+運算符來建立一個無效的數組。 不過,它可能會將所有內容都轉換為字符串,因此現在應該記錄相當合理的內容。

為什么不使用csv包,它會給您相同的結果,這是將csv文件轉換為數組的示例:

const csv = require('csv')
    , request = require('request');

var url = 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.csv';

request(url, function (err, response, data) {

    if (err) throw err;

    csv.parse(data, function (err, data) {

        if (err) throw err;

        // here you get your array
        console.log(data);

    });

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM