我有以下的JavaScript代码。
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable);
function2(someOtherVariable);
}
else {
doThis(someVariable);
}
});
我如何确保function2
在function1
完成后才被调用?
指定一个匿名回调,并让函数1接受它。
$('a.button').click(function(){
if (condition == 'true'){
function1(someVariable, function() {
function2(someOtherVariable);
});
}
else {
doThis(someVariable);
}
});
function function1(param, callback) {
...do stuff
callback();
}
如果你使用jQuery 1.5,你可以使用新的Deferreds模式。
$('a.button').click(function(){
if(condition == 'true'){
$.when(function1()).then(function2());
}
else {
doThis(someVariable);
}
});
编辑:更新博客链接:
丽贝卡-墨菲在这里有一篇很好的文章:http://rmurphey.com/blog/2010/12/25/deferreds-coming-to-jquery/
这取决于function1在做什么。
如果函数1正在做一些简单的同步的javascript,比如更新一个div值或其他什么,那么函数2将在函数1完成后启动。
如果function1正在进行异步调用,例如AJAX调用,你将需要创建一个"回调"方法(大多数ajax API'都有一个回调函数参数)。然后在回调中调用function2,例如。
function1()
{
new AjaxCall(ajaxOptions, MyCallback);
}
function MyCallback(result)
{
function2(result);
}