我如何控制日志--或者对从异步函数内部返回的数据做任何事情?
示例:JS文件:
async function getData(){
try {
$.getJSON('./data.json', (data) => {
return data;
});
} catch(error) {
console.log("error" + error);
} finally {
console.log('done');
}
}
console.log(getData());
JSON文件:
{
"stuff": {
"First": {
"FirstA": {
"year": [2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"FirstB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
},
"Second": {
"SecondA": {
"year": [2002, 2003, 2004, 2005, 2006],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
},
"SecondB": {
"year": [2007, 2008, 2009, 2010, 2011, 2012],
"Categories": ["Suspension", "Electrical", "Performance", "Motor"]
}
}
}
}
如何返回/访问JSON文件中的所有信息并使用它。例如,我想将"First"和"Second"添加到div中。"FirstA"和"FirstB"以及"SecondA"和"SeconddB"等也是如此。
就目前而言,我得到***承诺{:未定义}***
任何帮助都将不胜感激。
- -------更新----------
如果我在函数内部运行控制台日志,那么我就可以看到JSON数据,但是我需要访问函数外部的数据。
塞尔日
2条答案
按热度按时间ewm0tg9j1#
两个问题:
1.要设置
async
函数创建的promise的解析值,必须使用async
函数本身的return
语句。您的代码在getJSON
回调中有return
(被忽略),而不是async
函数本身。1.要获取
async
函数的分辨率值,必须使用await
函数(或者使用then
等旧方法使用它的承诺)。对于#1,可以返回
await
对getJSON
的结果:对于#2,你需要
await
你的函数(反过来,这需要在async
函数内部):...或通过
then
实现其承诺:附注:您的
getData
隐藏了错误,将它们转换为值为undefined
的分辨率,这通常不是一个好主意。相反,请确保它传播错误:然后,很自然地,确保使用
getData
的任何东西都处理或传播错误,确保某处的某个东西处理它(否则,您会得到一个“未处理的拒绝”错误)。回复你的评论
我如何从函数外部的日志访问json文件中的“stuff”?
getData
的异步结果/分辨率值是JSON定义的对象(它不再是JSON,它已经被解析了),所以你可以在它上面使用.stuff
,例如:hgqdbh6s2#
我使用下面的方法。创建一个异步函数如下:
在您的异步函数中使用它,您可以在其中记录日志,例如: