我有一个函数应该在另一个之后运行一个,例如:
function cutTomatoesAlone(Kg){
// slice my stuff
}
function cookTomatoes(Minutes){
// boil my stuff
}
我称之为:
cutTomatoesAlone(15) // 15kg, need 3 hours!
cookTomatoes(10); // need 10 minutes
但是,在我的cutTomatoesAlone(15)之前,cookTomatoes(10)完成了。
如何首先运行cutTomatoesAlone(15)
并在完成后运行cookTomatoes(10)
?
编辑: cutTomatoesAlone()
加载外部JSON。 cookTomatoes(10)
正在努力。
答案 0 :(得分:1)
您需要等待指定数量setTimeout()
的{{1}}方法,然后执行指定的函数。
milliseconds
答案 1 :(得分:1)
如果你的函数是独立的,那么它应该按照你期望的方式工作,假设你没有像异步地发出http get请求那样。
如果你是,你需要做的是当第一个函数从它的请求返回时使用JQuery的$ .done()函数调用第二个函数。
答案 2 :(得分:1)
给cutTomatoesAlone一个回调。
var cookingTimePerKg = 10;
function cutTomatoesAlone(Kg, Callback) {
// slice my stuff
// when done and a callback is defined do the callback
if(Callback) Callback(Kg*cookingTimePerKg);
}
然后你可以做到以下几点:
cutTomatoesAlone(15, cookTomatoes);
也可以在(潜在)XHR请求的onComplete上触发回调。
答案 3 :(得分:1)
一些Function对象原型调优会使其更容易阅读
Function.prototype.after = function(callback){
this();
if( typeof(callback) == "function")
callback();
}
a = function(){alert(1)};
a.after( function(){alert(2)} )
所以烹饪主题:
var cutThem = function(){
cutTomatoesAlone(15) // 15kg, need 3 hours!
}
cutThem.after( function(){
cookTomatoes(10);
});
这是一个通用的提案,当ajax加载到游戏中时,最好使用他们的“whenDone”选项为他们提供回调。
$("#basket").load("url.extension", {kilos: kg},
function(){
cookTomatoes(10);
});
答案 4 :(得分:1)
Learn about promises and deferred objects。 jQuery中的每个Ajax函数都返回一个promise,因此您可以轻松地链接函数调用。
例如:
function cutTomatoesAlone(Kg) {
return $.getJSON(...); // return the promise provided by $.getJSON
}
// called as
cutTomatoesAlone(15).then(function() { // attach callback
cookTomatoes(10);
});
如果是Ajax调用,一旦成功检索到响应,就会解析promise。