当前位置: 首页 > 知识库问答 >
问题:

如何从API获取获取结果以存储为全局变量?[重复]

穆英飙
2023-03-14

我正在做一个项目,我提取了美国GDP的API,然后从数据中创建了一个图表。现在我被问题的第一部分挂断了,因为我正在努力将JSON存储在变量中,以便在项目的其余部分使用它。我已经研究了其他一些线程,但还没有找到适合我的解决方案。

下面是我当前的代码。

let jsondata =;

fetch('https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json').then(
    function(u){ return u.json();}
  ).then(
    function(json){
        jsondata = json;
        console.log(jsondata)
    }
  )


console.log(jsondata)

目前,我可以在第二个函数中使用console.log(json)和console.log(jsondata)。然而,即使我在函数外部声明了变量,它也不会使变量成为自身全局变量。我错过了什么?

共有1个答案

狄奕
2023-03-14

fetch是一个异步函数。这意味着当调用函数时,它将被添加到事件循环中,代码将继续。当它到达最后一行时,jsondata变量尚未填充,因为fetch函数尚未完成。

您应该在函数前面添加一个wait,以确保在代码继续之前它已经完成。有关示例,请参阅:https://dev.to/shoupn/javascript-fetch-api-and-using-asyncawait-47mp

let jsondata = "";
let apiUrl = "https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json"

async function getJson(url) {
    let response = await fetch(url);
    let data = await response.json()
    return data;
}

async function main() {
    //OPTION 1
    getJson(apiUrl)
        .then(data => console.log(data));

    //OPTION 2
    jsondata = await getJson(apiUrl)
    console.log(jsondata);
}

main();
 类似资料:
  • 借助脚本任务和kcontext实例,我可以成功地从流程内检索全局变量(如NodeInstance、ProcessInstance等);但如果我需要在WorkItem中检索这些全局变量呢?当然,我可以将脚本任务放在进程中我的工作项之前,然后将一个全局变量分配给其中一个变量定义,以便在带有getParameter()方法的工作项中使用它; 但我们确实明白,这是双重的,不是吗?那么,在没有额外脚本任务的

  • 有可能得到变量名吗? 例如: 现在打印结果: 屏幕:

  • 我最近一直在尝试重新熟悉多线程,并找到了这篇论文。其中一个例子说在使用类似这样的代码时要小心: 声明: 是作者写错了,还是我漏掉了什么?

  • 问题内容: 我想将内容放入javascript全局定义的变量中,我使用ajax call获得的内容。 http://pastebin.com/TqiJx3PA 感谢您的任何建议 问题答案: pastebin代码已经做到了。我猜您实际上面临的问题是存在的,因为您的ajax调用是 异步的 ,这意味着您正在(异步)发出ajax请求,并立即尝试访问全局变量中的值-但它尚未尚未设定。 解决方案是在回调中执行

  • 我是Cypress的新手,我期待工作的一些事情有着非常奇怪的问题。例如,我试图获取表中某列的值,并在搜索输入中使用该值。我是这样做的: 但是当我运行这个程序时,我得到一个错误,指出[data cy=data table row]的长度是25而不是1。事实证明,我使用的id变量在should方法之外是不可访问的。我想那是因为这是一个promise。 如果我尝试这样做: 测试进入精神状态,一次又一次地

  • 问题内容: 我正在编写一个存储过程,需要在该过程中动态构造一个SQL语句以引用传入的表名。 我需要让该SQL语句返回结果,然后可以在整个过程的其余部分中使用它。 我已经尝试过使用临时表和其他所有东西,但是我不断收到一条消息,我需要声明变量等。 例如: 或者… 无论如何,有没有这样做而不使用实际表? 谢谢。 问题答案: 您是否尝试过类似的方法: 您需要确保将nvarchar字符串加N作为前缀,例如。