【问题标题】:JavaScript loop waiting some function return then do next loopJavaScript 循环等待某个函数返回然后执行下一个循环
【发布时间】:2012-04-17 15:44:35
【问题描述】:

我使用下面的代码等待,然后执行下一个循环:

function loop()
{
    setTimeout(function()
    {
        process_number(a[i]);
        i++;
        if (i < a.length)
            loop();
        else
        {
            alert("done!");
        }
    }, 5000);
}

我想改成像 jQuery $.get 完成后执行的回调函数。

$.get("test.cgi", { name: "John", time: "2pm" },
  function(data){
  alert("Data Loaded: " + data);
});

function loop()
{
    //where process_number executed complete, do next loop
    //process_number(a[i]);
    i++;
    if (i < a.length)
        loop();
    else
    {
        alert("done!");
    }
}

函数process_number执行时间不确定。

【问题讨论】:

  • process_number(a[i]); 会发生什么? (如果它不相关,你就不应该包含它)i 的第一个值是什么?
  • process_number(a[i]) 是流程数据函数,非常重要。我的第一个值为 0。@ajax333221
  • 我的意思是与问题无关,(我知道这对你很重要)。在这个站点中,您应该将代码缩减到可能重现问题的更少代码。但是,并不是每个人都会在发帖前花 1 小时阅读常见问题解答

标签: javascript loops asynchronous callback


【解决方案1】:

您可以在 loop() 函数中添加回调参数并在需要时执行它:

function loop(callback)
{
    //where process_number executed complete, do next loop
    //process_number(a[i]);

    if (callback) {
        callback();
    }
}

loop(function () {
    alert("continuing...");
});

【讨论】:

    【解决方案2】:

    基本上,您可以将函数名称作为参数传递,然后通过参数名称调用它,这与匿名函数一样有效:

    function foo(x,callback)
    {
        callback(x);
    }
    
    foo("hello",alert)
    foo("hello",function(x){alert(x);});
    

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2021-02-15
      • 2016-08-27
      • 2021-07-23
      • 2019-03-06
      • 2020-04-20
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多