【问题标题】:Javascript asynchronous for waitJavascript异步等待
【发布时间】:2016-10-06 12:54:00
【问题描述】:

我正在尝试运行一个异步 for 循环,该循环运行一个同步函数,然后等待一段时间。我的代码是:

function loopExec (i,imax, execFunc,param1) { 
    execFunc(i,param1);//Launch synchronous function which takes some time
    var y=i+1; 
    if (y < imax) {   //  if the counter < imax, call the loop function
        setTimeout(function () {    //  call a 0.1s setTimeout when the loop is called
            loopExec(y,imax, execFunc,param1);             //  ..  again which will trigger another call
        }, 100);
    }
    else if(y==imax){
        anotherFunction(param1);// The loop is over, clean up and log
    }
}

我想要的行为是: execFunc(1) -> 等待 100 毫秒 -> execFunc2-> 等待... A bit like this

我的行为是 execFunc1、execFunc2 等都以 100 毫秒的间隔启动,而不等待前一个完成,导致这些函数与文件交互时发生读/写冲突。

我不知道这是否与它有关,但我正在使用电子/nodeJS。

【问题讨论】:

  • 正是您想要做的。请清楚
  • “我的行为是 execFunc1、execFunc2 等都以 100 毫秒的间隔启动,而不等待前一个完成” 上面的代码不做那。它做你说你想让它做的事情。 jsfiddle.net/23ta609b
  • 你可以学习如何使用 Promise。
  • @T.J. Crowder:感谢您的链接,但使用我使用的 execFunc,它不起作用......我不明白为什么。
  • @Aer0 :我开始研究承诺,但我对这个概念还是很陌生

标签: javascript node.js for-loop asynchronous electron


【解决方案1】:

T.J.克劳德是对的,错误不在这个函数中,而是在它调用的函数中。

此代码符合预期。

【讨论】:

    【解决方案2】:

    如果你想做这样的事情

    此代码将起作用。

    var i = 0;
    var imax = 10;
    
    function myFunction() {
      console.log('balbla', i);
      i+=1;
      if(i !== imax) setTimeout(myFunction, 100);
    }
    
    setTimeout(myFunction, 100);

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 2019-05-10
      • 1970-01-01
      • 2019-10-21
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多