[英]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.