有没有办法在另一个函数完成后运行一个函数?例如:
doSomething();
doSomethingElse();
我只想在doSomething完成后运行doSomethingElse()。这有可能吗?
答案 0 :(得分:7)
如果您的doSomething()
函数异步执行某些操作(例如发出Ajax请求),那么您将需要使doSomethingElse()
成为该异步请求的回调,而不是在doSomething()
之后立即执行。 {1}}返回。
答案 1 :(得分:6)
实际上你可以用jQuery做你想做的事(至少在某种意义上)。它可以被认为有点hacky但是完美无缺。
只需在页面中包含一个您不会用于其他任何内容的元素。例如某个空的div。
<div id="syncFnHolder"></div>
然后将JS包含在您的函数中+我编写的runMe
函数。
function doSomething() { alert("First"); }
function doSomethingElse() { alert("Second"); }
function doSomethingElseThree() { alert("Third"); }
function runMe(fn, selec) {
return function() {
fn();
setTimeout(function() {
$(selec).dequeue("syncFnQueue");
}, 1000);
}
};
var selector = "#syncFnHolder";
//add three functions to a queue
$(selector).queue("syncFnQueue", runMe(doSomething, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElse, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector));
//start first function in queue (FIFO) others are triggered automatically
$(selector).dequeue("syncFnQueue");
这将产生三个警报,它们之间的距离为1秒,表示“第一”,“第二”,“第三”。
如果您不想延迟,请删除setTimeout,然后将呼叫留给$(selec).dequeue("syncFnQueue");
。
如果您的功能需要参数,例如doSomething(x,y,z)
您需要将runMe
函数调整为更好的部分,并以不同方式构造返回的函数。点击此处或发布新问题。
答案 2 :(得分:3)
你可能想要这样做....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
答案 3 :(得分:2)
答案 4 :(得分:-1)
本身无法明确强制执行此操作,但有一个想法是让doSomething()返回doSomethingElse()接受的值作为参数:
retval = doSomething();
doSomethingElse(retval);
这样至少可以阻止某人调用doSomethingElse()而不至少提供它需要的参数......当然,他们是否从调用doSomething()获得该参数是另一个问题。但这是一个开始。
从代码完成中解脱出来的想法。