如何从函数返回获取API结果?

时间:2018-07-19 07:47:57

标签: javascript api fetch

我想从函数返回获取API结果。但是我不确定,并且该函数不会返回我获取的数据:

function func() {
    fetch('https://randomuser.me/api/?results=10')
    .then(response => response.json())
    .then(json => (json.results))
}

let users = func()

console.log(users);

5 个答案:

答案 0 :(得分:1)

Fetch是异步的,并返回一个Promise。无法获取取回返回的数据并对其进行同步访问。而且它无法返回users,因为该函数需要同步返回,但是users的数据将不可用。该函数在Fetch收到URL响应之前返回。没关系,这就是一切完成的方式,并且仍然可以正常工作。

处理此问题的最灵活方法是仅从函数返回promise。然后,您可以对承诺的结果使用then()并在那里做任何您需要做的事情:

function func(url) {
    return fetch(url)  // return this promise
    .then(response => response.json())
    .then(json => (json.results))
}

func('https://randomuser.me/api/?results=10')
.then(users => console.log(users))  // call `then()` on the returned promise to access users
.catch(err => /* handle errors */)

答案 1 :(得分:0)

获取示例如下:

loadJSON('https://randomuser.me/api/?results=10');
async function loadJSON(fname) {
    var response = await fetch(fname)
    var j =  await response.json()
    document.getElementById('jsondemo1').value = j.name
    document.getElementById('jsondemo2').value = j.year
}

没有异步并等待:

fetch(url).then(response => response.json())
  .then(result => console.log('success:', result))
  .catch(error => console.log('error:', error));

答案 2 :(得分:0)

似乎您没有在函数中返回值。 如果未返回值,则您的函数将求值为undefined。

返回提取调用的结果(即json.results),并告诉我们会发生什么情况。

答案 3 :(得分:0)

由于此调用是异步的,因此usersundefined,因为您尚未记录服务器未收到响应,因此您需要执行以下操作。您可以将then添加到您的func呼叫中,然后在收到响应时记录用户。

function func(url) {
    return fetch(url)  // return this promise
    .then(response => response.json())
    .then(json => (json.results))
}

func('https://randomuser.me/api/?results=10')
.then(users => console.log(users))

答案 4 :(得分:-1)

您需要将提取的内容包装在Promise中,并使用json数据进行解析。示例:

function func(url) {
    return new Promise((resolve, reject) => { 
        fetch(url)  // return this promise
        .then(response => response.json())
        .then(json => resolve((json.results)))
    });
}

func('https://randomuser.me/api/?results=10')
    .then(users => console.log(users))