微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Object.keys方法将获取的异步数据添加到数组的问题?

如何解决使用Object.keys方法将获取的异步数据添加到数组的问题?

我正在编写一个函数,该函数应该带有一个动物id的对象,并基于该对象中的键向api请求并获取与该键值相关的数据(例如id)。

问题是,当我尝试将获取的猫狗推到数组中时,无法在Object.keys()。foreEach循环之外显示对象。

我如何在我的动物数组中返回获取的数据?

const animalIds =  {
   dogId: "11111",catId: "22222",};


const findData = async (animalIds) => {

let animals = [];

Object.keys(animalIds).forEach(async (key) => {
   const id = relatedTo[key];
   if (key === 'dogId') {
     const dog = await api.getDog(id);
     animals.push(dog)
   }

   if (key === 'catId') {
     const cat = await api.getCat(id);
     animals.push(cat)
   }
 });
 // console.log(animals) is an empty []
 return animals 
}

调用函数时,我正在使用await findData(animalIds)。

解决方法

问题在于.forEach(async (key) => {不等待功能完成,而只是启动它们。您需要的是带有map的{​​{1}},如下所示:

await Promise.all()

这会立即启动所有功能(与forEach相同),然后等待所有功能完成后再继续。这样await Promise.all(Object.keys(animalIds).map(async (key) => { const id = relatedTo[key]; if (key === 'dogId') { const dog = await api.getDog(id); animals.push(dog) } if (key === 'catId') { const cat = await api.getCat(id); animals.push(cat) } })); 数组将包含结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。