【问题标题】:Wait for execution of function in a for loop in Javascript? [duplicate]在 Javascript 的 for 循环中等待函数的执行? [复制]
【发布时间】:2016-02-02 18:10:12
【问题描述】:

我有一个类似于以下内容的脚本:

function1() {
    for(i < 5) {
        function2(i);
    }
}

function2(i) {
    $jqueryHere;
}

基本上,我有一个 for 循环,它调用第二个函数一定次数。但是,第二个函数只包含 jQuery,我不知道如何强制 for 循环等待 function2() 的执行完成,然后再继续进行下一次迭代并增加变量 i

编辑:这是第二个函数中的特定 jQuery 代码(我使用 typed.js 在我的网站上写出行):

function type(n, text, print) {
  $('#line' + (n + 1)).typed({
      strings: text[i],
      typeSpeed: 3,
      backDelay: 500,
      loop: false,
      contentType: 'html',
      loopCount: false,
      callback: function() {
        $('#line' + (n + 1)).siblings('.typed-cursor').remove();
        $(print[n]).insertAfter('#line' + (n + 1));
      }
  });

  $(".reset").click(function(){
      $('#line' + (n + 1)).typed('reset');
  });
}

【问题讨论】:

  • 提供你的 ajax 代码
  • 您希望它等待 ajax 调用完成吗?如果是这样,您可以在您的 ajax 调用中抛出 async: false 以强制它同步。理想情况下,你会让它保持异步,你的应用程序会正确处理它,但如果没有更多代码,就很难知道你在做什么。
  • 我刚刚为第二个函数添加了代码。

标签: javascript jquery ajax for-loop asynchronous


【解决方案1】:

编辑:我建议只使用promises,并调用then() 五次,但是如果您希望能够调整要调用异步函数的次数,则需要跟踪两次之间的迭代次数异步调用。您可以通过将调用次数存储在外部范围中来做到这一点,或者您可以像我在下面所做的那样通过将其作为参数传递来做到这一点。

function f1(i) { 
  if (!i || i < 5) // nullguard the parameter so function can be called as 'f1()'
    f2(i || 0);
}

function f2(i) {
  $ajax.onComplete = function () { f1(i+1); }
  $doAjax();
}

将计数器存储在外部作用域中的示例如下:

(function () {
  var count = 0;

  function f1() {
    if (count < 5) 
      f2();
  }

  function f2() {
    $ajax.onComplete = function () { count++; f1(); }
    $doAjax();
  }
})()

【讨论】:

  • 请添加一些解释为什么此代码有助于 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅How to Answer 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 2017-12-30
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多