node js array.push'not'工作

时间:2016-02-09 20:14:51

标签: javascript arrays node.js

我确定犯了一个愚蠢的错误,但无法追查它。有一个简单的脚本来读取表单文件:

(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 [] 脚本。

1 个答案:

答案 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);
})