我确定犯了一个愚蠢的错误,但无法追查它。有一个简单的脚本来读取表单文件:
(isProductSelected(product,data.products) ? 'checked' : '')
尝试创建表单的新文件:
<option value="us">United States</option>
问题是{"value":"us","name":"United States"}
无效,数组仍为空。 jsonC.push(c)
会打印console.log(c)
表示,但下一行[{1}}仍无法对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 []
脚本。
答案 0 :(得分:3)
原因是您在回调函数中向jsonC添加值。 readline.createInterface(...).on(function() {
是一个回调,并不是同步的。所以你的程序只是安排那个函数,然后它console.log(jsonC)
和jsonC仍然是空的,因为回调还没有被解雇。
尝试在回调中输出值,或使用promises知道回调何时结束。
以下是使用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);
})