当前位置: 首页 > 面试题库 >

Javascript异步功能控制台记录返回的数据

茹康裕
2023-03-14
问题内容

如何管理日志-或对异步函数内部返回的数据进行任何处理?

例如: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数据,但是我需要访问函数外部的数据。

哔叽


问题答案:

两个问题:

  1. 设置async函数创建的promise的分辨率值,您必须使用函数本身的return语句async。您的代码returngetJSON回调async函数中有一个(将被忽略),而不是函数本身。

  2. 获得功能 的分辨率值async,您必须先使用await它(或以更旧的方式通过then等使用其诺言)。

对于#1,您可以返回awaiting 的结果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,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步