代码之家  ›  专栏  ›  技术社区  ›  byte_slave

创建回调函数,而不是使用标志变量来控制特定函数何时完成

  •  1
  • byte_slave  · 技术社区  · 16 年前

    我有一个类似这样的代码:

    
    var nbrPrevArt = $("#accordion > div .accordionPanel").size();
    var processing = false;
    
    if (nbrPrevArt == 0) {
        processing = true;
        getArticlesPreview();//Fetches articles first
    }
    
    //loop that makes the browser to wait  until finishes "getArticlesPreview()" 
    while(!processing)
    {
    }
    
    //getArticlesPreview() is finished now we can safely execute this step
    $.ajax({
        type: "GET",
        url: "http://mydomain.com/somepage.htl",
        success: function(data) { alert(data);}
    });
    
    
    //-----------------------------------
    
    function getArticlesPreview()
    {
        //lenghty operation
        processing = false;
    }
    

    看起来不太实际,因为我使用了一个循环,让它等到函数完全执行后再执行下一步。

    有没有一种方法可以定义在第一个操作完成后调用的回调消息,并让我的第二个步骤($.ajax调用)在其中正常运行?

    泰西拉

    1 回复  |  直到 16 年前
        1
  •  3
  •   Valentin Rocher    16 年前

    您可以使用 apply 功能。你只需要添加一个 callback 参数,并将该函数放入此回调中。

    function makeAjax()
    {
        $.ajax({
           type: "GET",
           url: "http://mydomain.com/somepage.htl",
          success: function(data) { alert(data);}
        });
    }
    
    function getArticlesPreview(callback)
    {
        //lenghty operation
    
        callback.apply(this)
    }
    
    var nbrPrevArt = $("#accordion > div .accordionPanel").size();
    
    if (nbrPrevArt == 0) {
        getArticlesPreview(makeAjax);
    }