私が行った場合:
method();
method();
両方の呼び出しが並行して (同時に) 実行されます
2番目のメソッド();を作成したいだけです。最初の method() まで待ちます。開始する前に終了し、動的に実行すると、メソッド()を起動する回数がわからないためです。同時に。
出来ますか?
たとえば、これらは私が見ることができると同時に実行されます... http://jsfiddle.net/Lcgb8/
私が行った場合:
method();
method();
両方の呼び出しが並行して (同時に) 実行されます
2番目のメソッド();を作成したいだけです。最初の method() まで待ちます。開始する前に終了し、動的に実行すると、メソッド()を起動する回数がわからないためです。同時に。
出来ますか?
たとえば、これらは私が見ることができると同時に実行されます... http://jsfiddle.net/Lcgb8/
例えば
function method() {
var d = $.Deferred();
//do something async
setTimeout(function () {
d.resolve('some data'); //inform listeners that the process is completed
}, 2000);
return d; //return the deferred object
}
次に、次のことができます。
method().then(method).then(method).then(method);
各呼び出しの戻り値は、次の呼び出しの最初の引数としてそれぞれ渡されることに注意してください。
編集:非同期操作を動的にキューに入れる方法の例を次に示します。
function changeColorAsync(color) {
var d = $.Deferred();
setTimeout(function () {
$('body').css('background', color);
d.resolve();
}, 4000);
return d;
}
$(function () {
$('#color-form').on('submit', function (e) {
var color = $(this).find(':checked').val(), d;
d = d?
d.then(changeColorAsync.bind(this, color)) :
changeColorAsync(color);
return false;
});
});
を使用したシーケンシャル アニメーションを次に示します。transitionend
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>animation</title>
<style>
div{
width:50px;height:50px;background-color:#093;
-webkit-transition:all 300ms ease;
}
div.move{-webkit-transform:translate3d(200px,0,0);}/*GPU HW acceleration*/
</style>
<script>
(function(W){
var D,d,L,c=0;
function init(){
D=W.document;d=D.getElementsByTagName('div');L=d.length;var l=d.length;
while(l--){d[l].addEventListener('transitionend',next,false)}
next();
}
function next(){
d[c].classList[(d[c].className=='move'?'remove':'add')]('move');
c++;c=(c==L?0:c);
}
W.addEventListener('load',init,false);
})(window)
</script>
</head>
<body><div></div><div></div><div></div><div></div></body>
</html>
今はほとんどエラーが修正されていませんでした..
は無限 div をサポートしており、低リソースを使用する無限ループです。=)
あなたmethod()
は私のものだろうnext()
誰かがそれをjsfiddleしたい場合...私はそれを使用しません。
ps .: 純粋な javascript (jquery なし) + css3 (-webkit プレフィックス付き);
例
jQuery.queue()を見てください。