当前位置: 首页 > 知识库问答 >
问题:

执行异步forEach循环后重新定义全局变量[重复]

傅边浩
2023-03-14

我在StackOverflow上来回寻找这个特定的答案,但是我找不到任何有效的方法。“测试”应该在循环内部执行异步函数后定义。如果我尝试控制台日志"测试"它返回未定义。如何等待循环执行在堆栈中继续?

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);  
})()

共有1个答案

花博厚
2023-03-14

您需要从异步函数返回一个promise。否则你不能“等待”。不确定您在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);
})()
 类似资料:
  • 最近,我无意中编写了如下C代码: 仔细阅读代码,我发现了这个“错误”。然而,在运行时,它没有引起任何问题。明确地说,我的代码是用相对较新版本的MinGW-w64编译的,以创建本机Win32二进制文件。 当然,代码可以工作,但我很惊讶这是允许的,更奇怪的是,我的GCC-ish编译器没有抱怨它!(这个错误有GCC警告选项吗?) 有人能解释为什么这是允许的,以及为什么内部和外部变量不冲突/中断吗?理想情

  • 我是codeigniter的初学者,我正在制作一个用于学习的基本积垢。我在索引中遇到了一个错误。php 遇到PHP错误严重性:注意:消息:未定义变量:posts 文件名:posts/index。php 行号:2 回溯: 文件:/opt/lampp/htdocs/codeigniter/application/views/posts/index。php 行:2 函数:\u错误\u处理程序 文件:/o

  • 我想为数组中的每个项目运行一个函数。数组每次都不同,但为此我将只使用一个示例数组。它一直在说未定义的不是一个函数,我假设未定义的是未来的函数。解决这个问题的办法是什么?

  • 我尝试用forEach循环遍历一个包含三个变量的数组,并将每个变量的值更改为0-255之间的随机数。 我首先给每个变量一个简单的值:

  • 问题内容: 在Java中,我们不能与另一个具有相同名称的变量在同一作用域中声明一个变量: 语法错误,无法编译。但是,如果我们将其放入循环中: 不产生错误,效果很好。我们基本上是在声明相同的变量。是什么原因?在此背后我不知道/不了解的逻辑是什么? 问题答案: 考虑一下这种方式,在每个循环之后,作用域被“破坏”,变量消失了。在下一个循环中,将创建一个新的作用域,并且可以在该作用域中再次声明该变量。 由

  • 问题内容: 在以下片段中 内部是一个新变量, 外部 将保持为空。 通过显式定义短变量定义并将其替换为赋值,似乎可以正确地初始化外部变量 有没有一种更简单的方法来指定内部变量,而不是实际上是作用域变量,而是全局变量?我在想类似的东西,但这在包本身内部无效。 问题答案: 不,就是这样。只是 New()( https://golang.org/doc/effective_go.html#allocati