执行异步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 循环中设置全局变量

如何将许多变量和函数从全局环境导出到 foreach 循环?

PHP - foreach循环中变量之前的&符号[重复]

Vue(核心思想)