请参考我们项目中的以下调用函数。
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(对象),它将在 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()
谢谢,
湿婆