在循环内的IIFE函数内同步执行setTImeOut

时间:2019-11-09 01:14:55

标签: javascript callback settimeout iife

我有一个函数“ example”,它运行一个forloop,在循环内我称“ setTImeOut”,其中“ callback”是一个匿名函数,它执行一些操作并最终返回一些值。我在函数“ callTheAboveFunction”内调用函数“ example”,并将其分配给变量,在此函数内,我将调用“ example1”和“ example2”,它们旨在使用“ example”函数的返回值。

因此,我知道循环和闭合的工作方式,因此首先执行循环,并且因为“ setTimeout”是异步的,因此“ example”函数返回时无需进入允许“ example1”的“ setTimeout”上的匿名函数和“ example2”继续运行,执行完这些后,函数“ callTheAboveFunction”将返回“ setTimeOut”的回调并开始在其中执行代码。

所以,我的问题是:如何同步执行“示例”函数,以便执行“ setTimeOut”内部的匿名函数,然后用新数字返回值,然后,我可以使用此返回值开始执行“ example1”和“ example2”功能。在此代码中,由于程序的功能是同步的,因此我不打算使用“ await”或“ promises”。

function example(maxNum) {
  var someNumber = 15;
  for (let index = 0; index < maxNum; index++) {
    setTimeout(function() {
      someNumber = 25 * index;
      console.log("Hi " + index);
    }, 5000 * index);
  }

  return someNumber;
}

function example1(someNumber) {
  console.log(someNumber);
}

function example2(someNumber) {
  console.log(someNumber * 2);
}

function callTheAboveFunction() {
  var getTheNumber = example(10);
  example1(getTheNumber);
  example2(getTheNumber);
}
document.getElementById("restart").onclick = function() {
  callTheAboveFunction();
};

0 个答案:

没有答案