Проблема заключается в этой части:
parser.on('finish', async function(arr) {
return(arr) = await Promise.resolve(arr);
});
Когда вызывается событие finish
, вызывается функция обратного вызова function(arr)
, но поскольку это функция, любой оператор return
внутри он не возвращается initial()
, он возвращается function(arr)
, и ему не присвоено никакой переменной, поэтому значение, возвращаемое в return(arr)
, теряется. Вы ожидаете, что initial()
преобразуется в arr
, но поскольку оператор return arr
уже находится внутри function(arr)
, возвращаемое значение теряется и, поскольку initial
не имеет никакого оператора return
, в конце концов, он разрешается до undefined
. Я думаю, что в этом случае проще будет go с классическим c потоком обещаний.
function initial(){
return new Promise(resolve => {
var arr = [];
var stream = fs.createReadStream('sample.json', {start: 3, encoding: 'utf8'});
var parser = JSONStream.parse('employees.employee.*');
stream.pipe(parser);
parser.on('data', function (obj) {
arr.push(obj);
});
parser.on('finish', function(arr) {
resolve(arr);
});
})
};
initial().then(arr => console.log(arr));