如何控制日志 - 或者使用异步函数内部返回的数据做任何事情?
例如: 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"和"第二"并将它们添加到div。与" FirstA"相同和" FirstB"和" SecondA"和" SecondB" ......等等。
现在,我得到 承诺{:undefined}
非常感谢任何帮助。
--------- --------- UPDATE
如果我在函数中运行控制台日志,那么我可以看到json数据,但我需要访问函数外部的数据。
塞尔
答案 0 :(得分:3)
两个问题:
要设置 async
函数创建的承诺的分辨率值,您必须使用return
函数中的async
语句本身。您的代码在return
回调中有一个getJSON
(被忽略),而不是async
函数本身。
要获取 async
函数的分辨率值,您必须await
它(或通过{{1}以旧方式使用其承诺等等。)
对于#1,您可以返回then
await
的结果:
getJSON
对于#2,你需要async function getData() {
try {
return await $.getJSON('./data.json').promise();
}
catch (error) {
console.log("error" + error);
}
finally {
console.log('done');
}
}
你的函数(反过来,这需要在await
函数内):
async
...或通过console.log(await getData());
消费其承诺:
then
附注:您的getData().then(data => {
console.log(data);
});
隐藏了错误,将其转换为值为getData
的分辨率,这通常不是一个好主意。相反,请确保它传播错误:
undefined
然后,自然地,确保使用catch (error) {
console.log("error" + error);
throw error;
}
处理或传播错误的任何内容,确保某处处理它的某些内容(否则,您会收到“未处理的拒绝”错误)。
重新发表评论
如何从函数外的日志中访问json文件中的“stuff”?
getData
的异步结果/分辨率值是JSON定义的对象(它不再是JSON,它已被解析)。所以你可以使用getData
,例如:
.stuff