Выполнить setTImeOut синхронно внутри функции IIFE внутри цикла - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть функция «example», которая запускает forloop, и внутри цикла я вызываю «setTImeOut», в котором «callback» является анонимной функцией, которая выполняет некоторые операции и, наконец, возвращает некоторое значение. Я вызываю функцию «example» внутри функции «callTheAboveFunction» и назначаю ее переменной, внутри этой функции я вызываю «example1» и «example2», которые предназначены для использования возвращаемого значения функции «example».

Итак, я знаю, как работают цикл и замыкание, поэтому цикл выполняется первым, и поскольку «setTimeout» асинхронный, функция «example» возвращает, не входя в анонимную функцию в «setTimeout», которая позволяет«example1» и «example2» продолжаются, и после их выполнения функция «callTheAboveFunction» возвращается к обратному вызову «setTimeOut» и начинает выполнение кода внутри.

Итак, мой вопрос:Как я могу выполнить функцию «example» синхронно, чтобы была выполнена анонимная функция внутри «setTimeOut», а затем возвращено значение с новым номером, и после этого я могу использовать это возвращенное значение, чтобы начать выполнение «example1» и «example2»"функции. В этом коде я не планирую использовать «await» или «обещания», потому что функциональность программы синхронна.

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