将提取的JSON保存到变量中

v6ylcynt  于 2023-08-08  发布在  其他
关注(0)|答案(6)|浏览(156)

我试图将JSON保存到一个变量中,但似乎我不明白这里的一切。我让JSON以我喜欢的方式出现在console a中一次,但在我尝试再次调用它之后,它只返回promise。如何将JSON保存到变量中,以便以后可以使用JSON中的对象?

var jsondata = fetch(url).then(
    function(u){ return u.json();}
  ).then(
    function(json){
      console.log(json);
    }
  )
console.log(jsondata);

字符串

odopli94

odopli941#

fetch API是基于Promise的,并且总是返回一个新的Promise,无论是resolved还是rejected。您有多个选项来返回结果。

异步/等待

async function getData(url) {
  const response = await fetch(url);

  return response.json();
}

const data = await getData(url);

console.log({ data })

字符串

回调

function getData(url, cb) {
  fetch(url)
    .then(response => response.json())
    .then(result => cb(result));
}

getData(url, (data) => console.log({ data }))

pbpqsu0x

pbpqsu0x2#

let jsondata;    
fetch(url).then(
        function(u){ return u.json();}
      ).then(
        function(json){
          jsondata = json;
        }
      )

字符串
基本上,一旦promise解析为实际数据,您就需要分配jsondata变量。目前,您正在将整个promise赋值给您的jsondata变量,这不是您想要的。

mlmc2os5

mlmc2os53#

你可以在fetch函数之外创建一个单独的函数来处理JSON数据,就像下面的代码一样,fetch函数将完整的JSON对象传递给另一个名为“data_function”的函数,我们可以通过这个“data_function”继续处理JSON对象。

//fetch function
fetch(url).then(
function(u){ return u.json();}
).then(
function(json){
data_function(json); //calling and passing json to another function data_function
}
)

//another functions
function data_function(data){
alert(data.length); 
}

字符串

mepcadol

mepcadol4#

另一种选择是使用回调作为参数,这样就不会将变量暴露给全局范围。

function getFromAPI(url, callback){
  var obj;
  fetch(url)
    .then(res => res.json())
    .then(data => obj = data)
    .then(() => callback(obj))
 }

getFromAPI('https://jsonplaceholder.typicode.com/posts', getData);

function getData(arrOfObjs){
  var results = "";
  arrOfObjs.forEach( (x) => {
    results += "<p> Id: " + x.id + "<ul>"
    Object.keys(x).forEach( (p) => {
        results += "<li>" + (p + ": " + x[p]) + "</li>";
    });
    results += "</ul> </p> <hr>"
  })
  results += "";
  document.getElementById("myDiv").innerHTML = results;
}

字符串
http://jsfiddle.net/5gch2yzw/

rqdpfwrv

rqdpfwrv5#

在本例中,您可以创建另一个异步函数getData(),并将来自获取的URL的数据添加到全局变量。
当调用getData()函数时,它使用fetchData()函数从提供的URL异步获取城市数据。一旦成功获取数据,它将被添加到全局变量citiesData中,您可以在代码的其他部分使用该数据。

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

const citiesData = [];
const url = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';

// Fetch data only once
async function getData() {
    const data = await fetchData(url);
    citiesData.push(...data);
}

getData();

console.log(citiesData);

字符串

mjqavswn

mjqavswn6#

最简单的方法是使用async/await方法。
简单地复制并粘贴以下代码到你的chrome开发控制台来看看魔术:

async function githubUsers() {
            let response = await fetch('https://api.github.com/users')
            let users = await response.json()
            console.log(users)
    }

githubUsers()

字符串

相关问题