有没有办法在另一个函数完成后运行一个函数?例如:jquery同步函数
doSomething();
doSomethingElse();
我只想在doSomething完成后运行doSomethingElse()。这可能吗?
有没有办法在另一个函数完成后运行一个函数?例如:jquery同步函数
doSomething();
doSomethingElse();
我只想在doSomething完成后运行doSomethingElse()。这可能吗?
如果您的doSomething()
函数正在异步执行某些操作(例如发出Ajax请求),那么您需要为该异步请求回调doSomethingElse()
,而不是在doSomething()
返回后立即执行。
我正在做一个ajax请求,所以这看起来像是将其放入回调函数的有效解决方案,但我只是试图在回调之外执行它。 – ngreenwood6 2009-11-21 02:00:01
有没有办法来明确本身执行这一点,但一个想法是有DoSomething的()返回一个值,该值doSomethingElse()接受作为参数:
retval = doSomething();
doSomethingElse(retval);
这样至少可以防止有人从调用doSomethingElse(),至少提供它所需的参数......当然,他们是否从调用doSomething()获得该参数是另一个问题。但这是一个开始。
想法从Code Complete中解除。
我不明白这是如何解决任何事情。如果doSomething()正在做一些异步操作,问题才有意义。返回并传递值不会影响工作完成的时间。 – Nosredna 2009-11-21 01:30:26
其实你可以用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秒,表示“First”,“Second”,“Third”。
如果您不想延迟,请删除setTimeout并将呼叫留在$(selec).dequeue("syncFnQueue");
。
如果您的功能需要参数,例如doSomething(x,y,z)
您需要将runMe
函数修改为更好的部分,并以不同的方式构造返回的函数。检查这里或发布新的问题。
非常有趣 – gpilotino 2009-11-21 01:29:12
为什么不只是在JS对象中做排队和出队。似乎没有意义将它弹出到虚拟DOM元素中。 – nickytonline 2009-11-21 01:41:54
?我该怎么用jQuery来做到这一点?猜猜在这一天的这个时候(上午02点45分)我无法理解你的意思。 – jitter 2009-11-21 01:49:17
您可能要做到这一点....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
不贴你已经做你想要什么呢?我在这里错过了什么? – 2009-11-21 00:40:25
+1来衡量-1。这个问题和其他问题一样有效。 – echo 2009-11-21 00:44:22
任何机会,你可以给我们更多的代码或告诉我们你想要做什么? – Nosredna 2009-11-21 01:36:34