jquery等到上一个函数调用结束

时间:2013-05-10 11:10:01

标签: jquery

请参阅我们项目中的以下调用函数。

  var obj; // this will modified in A() function
function c()
{
   A();
   B(obj);
}

function A()
{

   for(i=0;i < object.length; i++)
   {
     if(object.data.toString()=="remote data")
       processRemoteData();
     else
       processData();
    }

}

function  processRemoteData()
{
   $.ajax({
      url://remote url
      success:function(data)
      {
         // set this remote data in some object that will be passed in b function
      }
   });
}


function processData()
{
   //process data
}

我将在B()函数中传递obj(object),该函数将在A()函数中修改或将在A()函数中设置。但是A()函数注意到了。

我想等待A()函数获取远程数据或普通数据,直到B()函数永远不会启动。因为基于在A()函数中修改的对象,我将在B()函数中进行处理。

但在我的场景中,A()函数永远不会等到从远程URL获取数据,它会立即启动B()函数。

我试过那样的

$.when(A()).done(function()
{
  B();
});

这也没有用,然后我接近$ .deferred这意味着

function A()
{
   var def= $.deferred();
   //process

   return def.promise();
}

但是这种方法对我来说也不行,因为A()函数永远不会等到它完成回调函数然后启动B()

谢谢,

希瓦

2 个答案:

答案 0 :(得分:1)

尝试类似

的内容
function A() {
    var def = $.deferred();

    var collect = [];

    for (i = 0; i < object.length; i++) {
        if (object.data.toString() == "remote data")
            collect.push(processRemoteData());
        else
            collect.push(processData());
    }

    $.when(collect).then(function() {
        def.resolve();
    }, function() {
        def.reject();
    })

    return def.promise();
}
function processRemoteData() {
    return $.ajax({
        url : '',
        success : function(data) {
            // set this remote data in some object that will be passed
            // in b function
        }
    });
}

function processData() {
    var def = $.deferred();
    // process data
    def.resolve();
    return def.promise();
}

答案 1 :(得分:-1)

您可以在$ .ajax中添加“async:false”选项。将async设置为false会告诉jquery使用同步ajax查询(默认情况下,使用异步ajax查询)