Как видно из заголовка, как можно выполнить оставшуюся часть кода (которая находится ниже основной функции), только когда выполнено какое-то условие? Например:

function foo() {
   count = 0;
   var interval = setInterval(function() {
      count++;
      if (count == 10) {
         clearInterval(interval);
		 console.log('Done');
      }
   }, 1000);
}

foo();

console.log("It should display after Foo() is done");
0
Hiurako 3 Мар 2018 в 16:42

3 ответа

Лучший ответ

Вы должны использовать promise для этого .. Тогда ваш код будет примерно таким

  function foo() {
      return new Promise(function(resolve , reject){

       count = 0;
       var interval = setInterval(function() {
          count++;
          if (count == 10) {
             clearInterval(interval);
             console.log('Done');
              resolve();
          }
       }, 1000);
       })

    }

    foo().then(function(){

    console.log("It will be displayed after Foo() is done");
})
2
QaMar ALi 3 Мар 2018 в 13:57

Вы путаете foo с setInterval. Вызов foo фактически "выполнен" перед журналом консоли. Я думаю, вы могли бы сказать, что «он должен отображаться после выполнения условия в функции в setInterval».

В этом случае есть несколько способов сделать это, самый простой из которых, вероятно, заключается в том, чтобы просто обернуть интересующую вас функциональность, как показывает void в своем ответе. Другим способом может быть использование обещаний или другой вид асинхронного потока.

0
גלעד ברקן 3 Мар 2018 в 13:51

Вы можете обернуть console.log в функцию, а затем вызвать функцию после выполнения условия.

В приведенном ниже решении console.log сработает через 10 секунд.

function foo() {
  count = 0;
  var interval = setInterval(function() {
    count++;
    if (count == 10) {
      clearInterval(interval);
      console.log('Done');
      execAfterFoo(); // Will execute after the condition is met
    }
  }, 1000);
}

foo();

function execAfterFoo() {
  console.log("It should display after Foo() is done");
}
0
void 3 Мар 2018 в 13:49