javascript - Javascript为什么返回空数组
问题描述
我知道 Js 是异步的,但是如何防止我的回调返回一个空数组?这是我的代码:
function getPicturesArray(nbr,callback){
var avatarArr = [];
for(var i =0; i<nbr ; ++i){
request("https://randomuser.me/api/",{json: true},(err,response,body)=> {
avatarArr.push(body.results[0].picture.large);
});
}
callback(avatarArr);
}
getPicturesArray(12, (e)=>{
console.log(e);
});
console.log('here');
最重要的是: [] 这里
解决方案
不要使用回调。使用 Promises 或 async/await。
getUserPic = async () => {
const url = 'https://randomuser.me/api/'
const response = await fetch(url)
const users = await response.json()
return users.results[0].picture.large
}
;(async () => {
const userAvatars = []
for (let i = 0; i < 12; i++) {
userAvatars.push(await getUserPic())
}
console.log(userAvatars)
})()
也尝试使用这个。在这种情况下,我建议您使用 Set 而不是 Array 来排除重复项。
getUserPic = async () => {
const url = 'https://randomuser.me/api/'
const response = await fetch(url)
const users = await response.json()
return users.results[0].picture.large
}
getMultipleUserPics = async limit => {
const userAvatars = new Set()
while (userAvatars.size != limit) {
userAvatars.add(await getUserPic())
}
return userAvatars
}
;(async () => {
const userPics = await getMultipleUserPics(5)
console.log(userPics)
})()
推荐阅读
- python - 如何使用重定向烧瓶传递参数
- elasticsearch - 如何在弹性搜索中设置 Metricbeat?
- android - 如何在离子的inAppBrowser内的后退按钮上添加确认弹出窗口
- sql - 在 IB Expert 中插入
- mysql - Mysql - 使用多个 where 子句进行查询
- java - JavaFx:在 UI 中更新属性时出现问题
- javascript - 在 React Web 应用程序中集成 Microsoft Teams 嵌入式共享按钮
- java - websphere 工作管理器超过最大线程数
- kubernetes - 在 Kubernetes 集群中使用 LogCLI 查询 LOKI
- c++ - 如何使用使用宏定义的函数