私はjQueryの遅延の使用方法を学んでいるので、簡単な小さな例を作成して、いじり回すことができました。
function a() {
var d = new $.Deferred,
$A = $('#A'),
$P = $('#P').progressbar();
setTimeout(function() {
$A.css('background-color', 'blue');
d.notifyWith($P, [.5]);
}, 2000);
setTimeout(function() {
$A.text('test');
d.notifyWith($P, [1]);
d.resolveWith($P, ['done']);
}, 4000);
return d.promise();
}
$('#G').click(function() {
a().progress(function(x) {
this.progressbar({
value: x * 100
});
}).done(function(x) {
alert(x)
});
});
デモ:http://jsfiddle.net/NTICompass/3DDSa/3/
この例はうまく機能します。操作が完了すると、アラートがポップアップ表示されます。
$.when
次に、複数のpromiseを(それ自体がpromiseを返す)と組み合わせることができるので、 a()
2つの関数に分割することにしました。
function a() {
var d = new $.Deferred,
$A = $('#A');
setTimeout(function() {
$A.css('background-color', 'blue');
d.notify(.5);
}, 2000);
return d.promise();
}
function b() {
var d = new $.Deferred,
$A = $('#A');
setTimeout(function() {
$A.text('test');
d.notify(1);
d.resolve('done');
}, 4000);
return d.promise();
}
$('#G').click(function() {
var $P = $('#P').progressbar();
$.when(a(), b()).progress(function(x) {
$P.progressbar({
value: x * 100
});
}).done(function(x) {
alert(x)
});
});
デモ:http://jsfiddle.net/NTICompass/3DDSa/8/
私$.when(a(), b())
は2つの約束を組み合わせるために使用しますが、機能していません。プログレスバーは50%になりますが、100%にはなりません。また、my.done
が呼び出されることはありません。
内部の.notify
(および)は効果がないようです。ここで何が問題になっていますか?2つの約束を組み合わせるにはどうすればよいですか?.resolve
b()
$.when