[英]node js array.push 'not' working
我敢肯定会犯一个愚蠢的错误,但无法追踪。 有一个简单的脚本可以读取以下格式的文件:
<option value="us">United States</option>
尝试创建以下形式的新文件:
{"value":"us","name":"United States"}
问题是jsonC.push(c)
无法正常工作,并且数组仍然为空。 console.log(c)
确实会打印json
表示形式,但是下一行jsonC.push(c)
仍然对jsonC
数组没有任何影响,并且它保持为空。
这是代码:
var fs = require('fs');
var readline = require('readline');
var src = 'country.txt';
var dest = 'country.json';
var re = /.+["](\w{2})["][>]([a-zA-Z ]+)[<][/].+/;
var jsonC = [];
readline.createInterface({
input: fs.createReadStream(src), terminal: false
}).on('line', function(line) {
var match;
if ((match = re.exec(line)) !== null) {
var c = {};
c.value = match[1];
c.name = match[2];
console.log(c); // prints fine
jsonC.push(c); // not adding to the array
}
});
console.log(jsonC); // prints []
console.log(JSON.stringify(jsonC)); // prints []
这是在Win 7
上运行的独立的node.js v4.2.6
脚本。
原因是因为您要在回调函数中向jsonC添加值。 readline.createInterface(...).on(function() {
是一个回调,并且不同步。因此,您的程序只是调度该函数,然后执行console.log(jsonC)
而jsonC仍然为空因为回调尚未触发。
尝试在回调中输出值,或使用Promise知道回调何时完成。
这是一个使用Promises的工作示例:
function readFromFile() {
var fsRead = Promise.defer();
readline.createInterface({
input: fs.createReadStream(src), terminal: false
}).on('line', function(line) {
var match;
if ((match = re.exec(line)) !== null) {
var c = {};
c.value = match[1];
c.name = match[2];
jsonC.push(c);
fsRead.resolve();
}
});
return fsRead.promise();
}
readFromFile().then(function(result) {
console.log(jsonC);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.