我想从函数返回获取API结果。但是我不确定,并且该函数不会返回我获取的数据:
function func() {
fetch('https://randomuser.me/api/?results=10')
.then(response => response.json())
.then(json => (json.results))
}
let users = func()
console.log(users);
答案 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)
由于此调用是异步的,因此users
是undefined
,因为您尚未记录服务器未收到响应,因此您需要执行以下操作。您可以将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))