Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript的for循环中等待函数的执行?_Javascript_Jquery_Ajax_For Loop_Asynchronous - Fatal编程技术网

在Javascript的for循环中等待函数的执行?

在Javascript的for循环中等待函数的执行?,javascript,jquery,ajax,for-loop,asynchronous,Javascript,Jquery,Ajax,For Loop,Asynchronous,我有一个类似于以下内容的脚本: function1() { for(i < 5) { function2(i); } } function2(i) { $jqueryHere; } (function () { var count = 0; function f1() { if (count < 5) f2(); } function f2() { $ajax.onComplete = fu

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

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

function2(i) {
    $jqueryHere;
}
(function () {
  var count = 0;

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

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

编辑:我建议改为使用承诺,并调用
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();
}
函数f1(i){
如果(!i | | i<5)//nullguard,则可以将参数so函数称为'f1()'
f2(i | | 0);
}
功能f2(i){
$ajax.onComplete=function(){f1(i+1);}
$doAjax();
}
在外部作用域中存储计数器的示例如下:

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

function2(i) {
    $jqueryHere;
}
(function () {
  var count = 0;

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

  function f2() {
    $ajax.onComplete = function () { count++; f1(); }
    $doAjax();
  }
})()
(函数(){
var计数=0;
函数f1(){
如果(计数小于5)
f2();
}
函数f2(){
$ajax.onComplete=函数(){count++;f1();}
$doAjax();
}
})()

提供ajax代码是否希望它等待ajax调用完成?如果是这样,您可以在ajax调用中抛出
async:false
,以强制它是同步的。理想情况下,您可以让它保持异步,并且您的应用程序可以正确处理它,但如果没有更多的代码,则很难判断您正在执行的操作。我刚刚为第二个函数添加了代码。请添加一些解释,说明此代码为何有助于OP。这将有助于提供一个未来观众可以学习的答案。有关更多信息,请参阅。