我将来自GitHub API的数据加载到4个数组中。 当我打印时,它显示未定义,但是在console.log中,它显示[],并且当我扩展数据时就在那里。 有没有一种方法可以在异步功能之外打印数组数据?
<script>
var avatar = [];
var names = [];
var star = []
var forks = [];
async function pegaRepositorio(){
const url = "https://api.github.com/search/repositories?q=language:Java&sort=stars&page=1"
const response = await fetch(url)
const resultado = await response.json()
resultado.items.forEach(i=>{
avatar.push(i.owner.avatar_url);
names.push(i.name);
star.push(i.stargazers_count);
forks.push(i.forks_count);
})
}
window.onload = pegaRepositorio;
console.log(avatar[0]);
document.body.innerHTML= avatar[3];
</script>
答案 0 :(得分:0)
pegaRepositorio
有一个HTTP请求和一个异步函数。但这些行:
window.onload = pegaRepositorio;
console.log(avatar[0]);
document.body.innerHTML= avatar[3];
是同步的。 console.log
等不会等待pegaRepositorio
完成。这就是为什么得到undefined
的原因,但是当您填充数组时,HTTP调用已经有了响应。
这是一个非常常见的情况,
Loading List ...
render
向页面显示新值。然后从render
函数中调用pegaRepositorio
函数。就像
async function pegaRepositorio(){
...get http..
render(data);
}
render(data){
document.getElementByID('someid').innerHTML = data.somekey
}