【问题标题】:How to store fetched JSON object into global variable"? [duplicate]如何将获取的 JSON 对象存储到全局变量中”? [重复]
【发布时间】:2021-01-04 04:15:43
【问题描述】:

我正在尝试将 'fetch' 函数获得的 JSON 对象存储到全局变量中,但是它在运行时似乎存在异步问题。

function getCustomerId(name) {
    var output;

    fetch("url" + name)
    .then(
        function(response) {
            if (response.status !== 200) {
                console.log("Looks like there was a problem. Status Code: " + response.status);
                return;
            }
            response.json().then(function(data) {
                console.log("CustomerId:" + data.id); //I have a column in my database called 'id'
                output = data.id;
            });
        }
    )

    .catch(function(err) {
        console.log("Fetch Error :-S", err);
    });

    console.log(output);
}

现在返回的响应是:

undefined
CustomerId:A1234B123C 

【问题讨论】:

  • 是的。最后一个 console.log(output);需要在设置值之后。否则 console.log(output);将在您的调用返回数据之前执行。解决这个问题的最佳方法是在结果返回时调用一个函数,然后运行依赖于返回数据的代码。但我不确定你的用例。
  • @MisterJojo 是的,谢谢!我一直在寻找堆栈页面,您链接的页面提供了缺失的部分。

标签: javascript html json http fetch


【解决方案1】:

尝试使用 async/await 来实现:

async function getCustomerId(name) {
  var output;
  let response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  if (response.status !== 200) {
    console.log("Looks like there was a problem. Status Code: " + response.status);
  } else {
    const data = await response.json()
      //console.log("CustomerId:" + data.id); 
      output = data.id;
      console.log(data.id)
  }
  console.log(output);
}

getCustomerId()

【讨论】:

  • 我刚试过这个,它不起作用。在响应完成之前,console.log(output) 仍在运行。
  • 哦!我现在就检查一下,对不起...
  • 我已经找到解决方案并将发布它。感谢您的支持!
  • 对不起,我迟到了,一点也不 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2021-10-12
  • 2019-05-31
  • 2022-08-14
  • 2021-09-13
相关资源
最近更新 更多