【发布时间】:2020-08-07 10:46:21
【问题描述】:
我正在尝试解析示例 JSON 并将各个对象推送到数组中。我遇到的问题是我认为它正在工作,但是当调用console.log 打印结果时,它返回一个undefined 值。我相信这是因为我没有正确处理我的 async/await 请求,但我不确定在所有元素都被推送到我的数组之前如何不运行 console.log 函数。
Attacks.js
//Assume JSON output = {attack source, attack destination, attack type}
//Required modules
//@ts-ignore: undeclared module
//const watchStream = require('fs-watch-stream')
const es = require('event-stream')
var JSONStream = require('JSONStream')
const fs = require('fs');
async function initial(){
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', async function(arr) {
return(arr) = await Promise.resolve(arr);
});
};
initial().then(arr => console.log(arr));
sample.json
{
"employees": {
"employee": [
{
"id": "1",
"firstName": "Tom",
"lastName": "Cruise",
"photo": "https://jsonformatter.org/img/tom-cruise.jpg"
},
{
"id": "2",
"firstName": "Maria",
"lastName": "Sharapova",
"photo": "https://jsonformatter.org/img/Maria-Sharapova.jpg"
},
{
"id": "3",
"firstName": "Robert",
"lastName": "Downey Jr.",
"photo": "https://jsonformatter.org/img/Robert-Downey-Jr.jpg"
}
]
}
}
【问题讨论】:
-
我不认为 async 和 .then() 混合。 “让 arr = await initial()”有效吗?
-
您可以在代码本身中编写
console.log()语句。前任。parser.on('data', function (obj) { arr.push(obj); });下一行可以是console.log(arr)。 -
@DevOfZot 代替哪一行?
-
@zer00ne 这样做时,它会在每次读取一条数据时打印数组。这导致打印 3 个不同的数组,每个数组都比下一个长。我只想打印最终结果。
标签: javascript json promise async-await