如何管理日志-或对异步函数内部返回的数据进行任何处理?
例如:JS FILE:
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”和“ SecondB” …相同。
就目前而言,我得到了 Promise {:undefined}
任何帮助将不胜感激。
---------更新---------
如果我在函数内部运行控制台日志,则可以看到json数据,但是我需要访问函数外部的数据。
哔叽
两个问题:
要 设置async
函数创建的promise的分辨率值,您必须使用函数本身的return
语句async
。您的代码return
在getJSON
回调async
函数中有一个(将被忽略),而不是函数本身。
要 获得功能 的分辨率值async
,您必须先使用await
它(或以更旧的方式通过then
等使用其诺言)。
对于#1,您可以返回await
ing 的结果getJSON
:
async function getData() {
try {
return await $.getJSON('./data.json').promise();
}
catch (error) {
console.log("error" + error);
}
finally {
console.log('done');
}
}
对于#2,您将需要其中一个await
函数(这又需要在async
函数内部):
console.log(await getData());
…或通过then
以下方式兑现其承诺:
getData().then(data => {
console.log(data);
});
旁注:您的getData
隐藏错误,将其转换为带有值的分辨率,undefined
通常不是一个好主意。相反,请确保它传播错误:
catch (error) {
console.log("error" + error);
throw error;
}
然后,自然地,请确保使用getData
该错误的任何事物都可以处理或传播该错误,并确保某个地方 可以
处理该错误(否则,您将收到“未处理的拒绝”错误)。
重新发表您的评论
我如何从函数外部的日志中访问json文件中的“内容”?
的异步结果/解析度值getData
是JSON定义的对象(不再是JSON,它已被解析)。因此,您可以使用.stuff
它,例如:
// In an `async` function
console.log((await getData()).stuff);
// Or using `then`:
getData().then(data => {
console.log(data.stuff);
});
背景: 在log4j2中,当使用asyncappender时,您可以将记录器的参数“blocking”设置为false,以便丢弃溢出缓冲区大小的任何日志,而不会减慢主线程的速度。(请参见asyncAppender下的此处。)https://logging.apache.org/log4j/2.x/manual/appenders.html) 我正在将我们的应用程序升级到这里找到的辉煌的asyncL
在MariaDB数据库中,使用语句和子句从表中检索一个或多个记录。 语法: 示例1: 以降序检索记录: 使用语句并带有子句查询表中的数据。结果列的值按降序显示,为。参考如下语句 - 执行上面查询语句,得到以下结果 - 示例2: 按列的值升序检索记录: 执行上面查询语句,得到以下结果 - 示例3:分页 在应用程序中,由于数据记录太多,不能全在一个页面中全部显示,我们经常要使用分页来显示。假设每页显示
问题内容: 现在在我的应用程序中,某些时候我们正在将一些繁重的工作记录到日志文件中。 基本上仅用于日志记录,我们先创建可用数据的JSON,然后登录到Log文件。这是以JSON格式记录数据的业务要求。 现在从可用数据创建JSON,然后登录到FILE需要花费大量时间,并影响原始请求的返回时间。现在的想法是改善环境。 我们讨论的一件事是使用以下方法创建线程池 在我们的代码中,然后向其提交任务,该任务会将
问题内容: 我是nodejs的新手,正在编写一些查询MySQL数据库并从给定的user_id返回用户名的代码。我一直在阅读,您所有的功能都应该是异步的。在这种情况下,理想情况下,我希望服务器能够在进行此查询时响应其他事件请求。但是,这不是一个特别大的查询,只返回一个值。也许我应该使其同步?(如果这是您的答案,那么更改示例代码将是不错的选择)无论如何,这是我的功能。它在最后一行“ return cu
我有一个spring boot应用程序(spring 5.0.7.Release,spring boot version 2.0.3)。 当我尝试从我的angular 4应用程序登录时,我得到一个错误500 2018-07-13 12:11:59.243调试64187--[nio-9000-exec-2]F.p.a.customBasicAuthenticationFilter:身份验证成功:or
问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步