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

带有异步等待的 Foreach 和 push() 不会推送值

如何解决带有异步等待的 Foreach 和 push() 不会推送值

这是我的代码

app.get("/bots/:id",async (req,res)=>{
 var bot = await Bots.findOne({id: req.params.id});
 if(!bot) return await res.send("not there");
 bot.desc = await marked(bot.desc);
 var user = req.user;
 bot.owner = [];
 await bot.owners.forEach(async (id)=>{
  await fetch(`${process.env.DOMAIN}/api/client/users/${id}`).then(r=>r.json()).then(async d=>{
  await bot.owner.push(d.tag);
 });
 });
 await console.log(bot.owner);
 await res.render('botpage.ejs',{user,bot});
})

App 是 express,fetch 是 node-fetch,我使用 ejs 来渲染。 当我执行 console.log(bot.owner) 时,它会记录 [] 而不是我获取d.tag 数组。 除了这个,一切都很好,包括我的 api 和 ejs 页面process.env.DOMAIN = https://discord.rovelstars.com

解决方法

foreach 循环不等待。使用 for 循环而不是 foreach。

for(int i=0;i<bot.owners.length();i++){
 ....your task
}

for(var obj of bot.owners){
 ...your task
}

访问this了解更多详情

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