如果我需要一个接一个地调用这个函数,
$('#art1').animate({'width':'1000px'},1000);
$('#art2').animate({'width':'1000px'},1000);
$('#art3').animate({'width':'1000px'},1000);
Run Code Online (Sandbox Code Playgroud)
我知道在jQuery中我可以做类似的事情:
$('#art1').animate({'width':'1000px'},1000,'linear',function(){
$('#art2').animate({'width':'1000px'},1000,'linear',function(){
$('#art3').animate({'width':'1000px'},1000);
});
});
Run Code Online (Sandbox Code Playgroud)
但是,我们假设我没有使用jQuery而且我想调用:
some_3secs_function(some_value);
some_5secs_function(some_value);
some_8secs_function(some_value);
Run Code Online (Sandbox Code Playgroud)
我应该如何调用这个函数来执行some_3secs_function,然后在该调用结束后,然后执行some_5secs_function并在该调用结束后再调用some_8secs_function?
更新:
这仍然无效:
(function(callback){
$('#art1').animate({'width':'1000px'},1000);
callback();
})((function(callback2){
$('#art2').animate({'width':'1000px'},1000);
callback2();
})(function(){
$('#art3').animate({'width':'1000px'},1000);
}));
Run Code Online (Sandbox Code Playgroud)
三个动画同时开始
我的错误在哪里
让我们知道我有如下代码:
var shared = 100;
function workWithIt(){
shared += 100;
}
setTimeout(workWithIt, 500);
setTimeout(workWithIt, 500);
Run Code Online (Sandbox Code Playgroud)
理想情况下,这段代码应该为变量添加200 shared,之后为300.
但是,正如我所知c,如果将操作+ =拆分为多个命令,可能会产生一些影响.
可以说,这是函数的执行顺序:
setTimeout() --> create Thread A
setTimeout() --> create Thread B
wait 500ms
**Thread A** | **Thread B**
--------------------------------+---------------------------------
var tmpA = shared; //100 |
| var tmpB = shared; //100
| tmpB = tmpB+100; //tmpB=200
| shared = tmpB;
tmpA = tmpA+100; //tmpA=200 |
shared = tmpA; |
Run Code Online (Sandbox Code Playgroud)
在这种情况下,shared现在值为200.
这可能发生在许多编程语言中,如c,c ++,java,c#,...... - 但是它也可以在Javascript中发生吗?
或者更一般地说:Javascript如何处理其线程,何时在线程之间切换,是否有内置方法,可用于处理竞争条件?
javascript multithreading synchronization thread-safety race-condition