【发布时间】:2012-03-19 23:43:18
【问题描述】:
看看这个code:
<a href="#" id="link">Link</a>
<span>Moving</span>
$('#link').click(function () {
console.log("Enter");
$('#link').animate({ width: 200 }, 2000, function() {
console.log("finished");
});
console.log("Exit");
});
正如您在控制台中看到的,“动画”函数是异步的,它“分叉”了事件处理程序块代码的流程。事实上:
$('#link').click(function () {
console.log("Enter");
asyncFunct();
console.log("Exit");
});
function asyncFunct() {
console.log("finished");
}
跟随块代码的流程!
如果我希望使用这种行为创建我的function asyncFunct() { },我该如何使用 javascript/jquery?我认为有一种策略不使用setTimeout()
【问题讨论】:
-
看看 jQuery 源代码 :)
-
.animate() 方法使用回调。当动画完成时,Animate 将调用回调。如果您需要与 .animate() 相同的行为,您需要的是一个回调(在一些其他操作之后由“main”函数调用)。如果您需要一个“完整的”异步函数(一个在不阻塞执行流程的情况下调用的函数),情况就不同了。在这种情况下,您可以使用延迟接近 0 的 setTimeout()。
-
@Fabio Buda:为什么 callback() 应该实现一种异步?其实不是jsfiddle.net/5H9XT/9
-
事实上,在“回调”之后,我引用了一个带有 setTimeout 的“完整”异步方法。我的意思是在其他代码之后调用函数的方式将回调作为伪异步:-)
标签: javascript jquery function asynchronous