gpt4 book ai didi

javascript - 无法在 forEach 循环 JavaScript 之外访问变量

转载 作者:行者123 更新时间:2023-12-04 08:53:40 24 4
gpt4 key购买 nike

我想在函数外获取 allItems 变量,但我只能获取一个空数组。第一个 console.log 显示我想要的数组,但第二个只是 []。

var allItems = [];    
orderPads.forEach(async element => {

element.orders_fk.forEach(async elem => {

let itemsArray = await OrderedItem.find({ order_fk: elem });


itemsArray.forEach(async e => {

let temp = e.toObject();
const mesa = await Table.findById(element.mesa);
temp.mesa = mesa.name;

allItems.push(temp)
console.log(allItems)

})
})
});
console.log(allItems)

我已经在网上寻找答案,但在这种情况下似乎没有任何效果。感谢您的帮助!

最佳答案

异步函数不会做您认为它们在 forEach 中所做的事情。 Foreach 将等待每个循环,但由于它不会返回 Promise,因此您实际上不能等待所有循环(forEach)完成 - 方法将立即返回当前的 null。然后你记录一次。您可能会注意到,您的最后一条日志先记录,而您的其他日志稍后,表明 forEach 已完成,但循环稍后完成,并且您的数组仅在您的第一篇日志。

就我个人而言,我建议改用 for 循环本身,这实际上不会让您脱离异步流程:

const allItems = [];   

for( const element of orderPads ){
for( const elem of element.orders_fk ){

const itemsArray = await OrderedItem.find({ order_fk: elem });

for( const e of itemsArray ){

const temp = e.toObject();
const mesa = await Table.findById(element.mesa);
temp.mesa = mesa.name;

allItems.push(temp)
console.log(allItems)

}

}}

console.log(allItems)

for 循环是 Javascript 中的核心结构,而 forEach 本质上是数组中 for 循环的简单包装器用于异步使用。

关于javascript - 无法在 forEach 循环 JavaScript 之外访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63963531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com