执行异步forEach循环后重新定义全局变量[重复]
Posted
技术标签:
【中文标题】执行异步forEach循环后重新定义全局变量[重复]【英文标题】:Redefine global variable after async forEach loop is executed [duplicate] 【发布时间】:2021-02-27 11:08:07 【问题描述】:我在 *** 上来回寻找这个特定的答案,但我找不到任何有用的东西。 “测试”应该在循环内执行异步函数之后定义。如果我尝试控制台日志“测试”它返回未定义。如何在堆栈中等待循环执行?
let array = [1, 2, 3, 4, 5]
let test;
array.forEach(async el =>
await setTimeout(() =>
if(el === 5)
test = true
, 5000)
)
console.log(test)
我还尝试定义一个带有循环的异步函数,然后调用 IIFE,等待函数和控制台记录变量。它返回相同的未定义。
let array = [1, 2, 3, 4, 5]
let test;
async function hey()
array.forEach(async el =>
await setTimeout(() =>
if(el === 5)
test = true
, 5000)
)
(async () =>
await hey();
console.log(test);
)()
【问题讨论】:
我的答案不正确。似乎它没有按应有的方式工作。请“不接受”它,以便我可以删除它:D 谢谢 【参考方案1】:您需要从异步函数返回一个承诺。否则你不能'等待'。 不太确定你在 foreach 循环中要做什么。
let array = [1, 2, 3, 4, 5]
let test;
async function hey()
return new Promise(resolve =>
array.forEach( el =>
setTimeout(function()
el === 5 ? resolve(true) : resolve(false)
, 5000);
)
)
(async () =>
test = await hey();
console.log(test);
)()
【讨论】:
我误加了false。但是一旦我承诺 forEach 循环,它就会起作用。谢谢 嗯,我对我的回答有了第二个想法。我会再检查一下。请确保它在您的应用程序中正常工作以上是关于执行异步forEach循环后重新定义全局变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何正确调用 Parallel.ForEach 循环中的调用异步方法[重复]
求大神,c语言大神,一段程序说的啥意思,全局变量等于0怎么循环下面的
PHP 变量范围 - 在 foreach 循环中设置全局变量