Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 管道后的代码未在节点js readstream中执行_Javascript_Node.js_Asynchronous_Pipe_Jsonstream - Fatal编程技术网

Javascript 管道后的代码未在节点js readstream中执行

Javascript 管道后的代码未在节点js readstream中执行,javascript,node.js,asynchronous,pipe,jsonstream,Javascript,Node.js,Asynchronous,Pipe,Jsonstream,我有如下的JSON customers.json { "customers":[ { "name": "customer1"}, { "name": "customer2"}, { "name": "customer3"} ] } var fs = requi

我有如下的JSON customers.json

   {
    "customers":[
          { "name": "customer1"},
          { "name": "customer2"},
          { "name": "customer3"}
         ]
   }

var fs = require('fs'),
    JSONStream = require('JSONStream'),
    es = require('event-stream');

async function run(){
    var getStream = function () {
        var jsonData = 'customers.json',
            stream = fs.createReadStream(jsonData, { encoding: 'utf8' }),
            parser = JSONStream.parse('customers.*');
        return stream.pipe(parser);
    };
    var arr = [];
    getStream()
        .on('data', function (chunk) {
            arr.push(chunk);
        })
        .on('end', function () {
            console.log('All the data in the file has been read' + arr.length);
        })
        .on('close', function (err) {
            console.log('Stream has been Closed');
        });

        console.log('end run()');
}

async function main(){
    run().then(function(){
        console.log('In then');
    }).catch(function(){
        console.log('In catch');
    })
}

main();
在输出中为什么在“结束”、“关闭”之前“在然后”打印。事件

如何在“结束”、“结束”事件后获得“当时”或“捕获”


如何以同步方式执行run()方法。

异步运行函数时,对
控制台的调用不一定按顺序进行。如果是异步的,则不应依赖于按顺序执行的任何操作

如果要使
run()
同步,实际上比现在要简单得多,因为根本不需要使用流。您只需调用
fs.readFileSync
即可从本地json文件加载数据。解释了一些差异

var fs = require('fs');

function run() {
  const rawData = fs.readFileSync("customers.json"); // Buffer
  const jsonData = JSON.parse(rawData); // object
  jsonData.customers.forEach( o => console.log(o.name) );
}

function main() {
  run();
  console.log("done");
}

main();
控制台输出:

customer1
customer2
customer3
done

JSONStream主要是为大型文件设计的,您可以在其中解析文件的某些部分,而不必解析整个文件。这里是这样吗?或者我的答案足够了?@LindaPaiste,没错,我有大量的json,所以我无法在内存中读取整个文件。所以你的回答是不够的。