在另一个函数之前执行一个函数(包含setInterval)的简单方法

时间:2019-10-12 17:29:32

标签: javascript async-await

我有三个功能,我想一个接一个地执行。我的三个函数是A_rray()Counter()Main_Function(N,A),我有一个基于Main_Function(N,A)的{​​{1}}的条件,一旦执行了该部分,那么我想等待A_rray()如下-

Counter()

功能是-

        if (A_rray().length!=0){
                           Main_Function(500,A_rray());
                              }
else{console.log('Number = ',A_rray().length)}
Counter();

但是问题是,首先执行function A_rray(){ D=[1,2];return D;} function Counter(){console.log('Done!');} function Main_Function(N,A){ var counter = 0; var interval = setInterval(function() { counter++; if (counter === A.length) { clearInterval(interval); } console.log(counter, 'iteration') }, N) } 函数,然后执行条件和其他部分,这可能是因为Counter()

我尝试了一些使用Stack Overflow编写的方法,但是由于我是初学者,所以这些方法不起作用。

是否有一种简单的方法可以基于setInterval执行第一个功能Main_Function(N,A),然后有效地执行Array()

2 个答案:

答案 0 :(得分:1)

一种更简单的方法是编辑MAIN_FUNCTION,以便从内部调用Counter

function MAIN_FUNCTION(N,A) {
  var counter = 0;
    var interval = setInterval(function() {
        counter++;
        console.log(counter, 'iteration');
        if (counter === A.length) {
            clearInterval(interval);
            Counter();
        }
    }, N);
}

然后摆脱执行位中的其他Counter调用

这将确保Counter仅在interval的最后一次迭代之后运行

一些注意事项:

  • 看到Counter仅在记录日志,您可以简单地用日志调用替换该调用
  • 调用函数Array会覆盖javascript的默认函数,它是Array类的构造函数

答案 1 :(得分:1)

您可以返回Promise,如果从clearInterval调用Main_Function(N,A)的话,它将解决。因此,您可以等待Main_Function(N,A)完成,然后根据需要执行Counter()

(async() => {
  if (Array().length != 0) {
    await Main_Function(500, Array());
  } else {
    console.log('Number = ', Array().length)
  }
  Counter();
})();

function Array() {
  D = [1, 2];
  return D;
}

function Counter() {
  console.log('Done!');
}

function Main_Function(N, A) {
  return new Promise(resolve => {
    var counter = 0;
    var interval = setInterval(function() {
      counter++;
      if (counter === A.length) {
        clearInterval(interval);
        resolve();
      }
      console.log(counter, 'iteration');
    }, N);
  });
}