使用 setTimeout 调用一次 forEach 的回调函数即可完成

Calling a callback function once forEach is complete using setTimeout?

本文关键字:函数 回调 forEach 一次 调用 setTimeout 使用      更新时间:2023-09-26

好的,所以这个问题之前已经问过了,但我没有看到我喜欢的答案,认为我找到了解决方案,但想确认一下。 基本上,我在 React 中调用了一个函数,该函数中有一个forEach循环。 我需要等待在forEach循环完成后做某事。

我可以为此使用setTimeout(function(){},0)吗? 我知道一旦堆栈被清除,setTimeout就会被调用,但这适用于异步函数吗?

这就是我想要完成的:

function doSomethingAsync(){
  arr.forEach(function(){
    //loop through this thing
  });
  setTimeout(function(){
   callback()
  }, 0);
};

在过去的 30 分钟内,我一直在测试这个,它正在做我想做的......但我不想假设这将是一个一致的方法。 思潮?

基本上,我在 React 中调用了一个函数,其中包含一个 forEach 循环。我需要等待在 forEach 循环完成后执行某些操作。

我可以为此使用 setTimeout(function(){},0) 吗?

不。有两种可能性:

  1. forEach正在执行同步工作,在这种情况下,setTimeout是不必要的和毫无意义的——在循环完成之前,包含它的函数不会返回,因此您可以在调用该函数后执行下一件事。

  2. forEach正在启动异步工作,在这种情况下,setTimeout只是引入了一种混乱情况:它可能在异步工作完成之前触发,也可能在异步工作完成后触发。如果在所有这些异步请求完成后需要回调,则要调用的函数必须提供该回调供您使用。

所以要么你不需要它,要么你不能使用它。