[解決済み] 繰延べと約束
質問
DeferredとPromiseの違いは、jQueryのバージョン以外に何かあるのでしょうか?
私の必要性には何を使うべきでしょうか? 私は
fooExecute()
. 必要なのは
fooStart()
と
fooEnd()
でhtmlのdivの状態を切り替えるなど。
//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }
$('#button1').on('click', function() {
var deferred1 = $.Deferred();
var promise1 = $.Promise();
deferred1.???
promise1.???
});
解決方法は?
第一に
$.Promise();
は存在しないからです。
A
遅延オブジェクト
は、以下のことが可能なオブジェクトです。
作成
プロミスを作成し、その状態を
resolved
または
rejected
. Deferredsは通常、自分で関数を書いて、呼び出し元のコードにプロミスを提供したい場合に使用します。あなたは
プロデューサー
を生成します。
A
約束
は、その名の通り、将来の値に関する約束です。その値を得るためにコールバックを付けることができる。この約束はあなたに"given"され、あなたが
レシーバー
将来の値の
プロミスの状態を変更することはできません。というコードのみです。
作成された
は、プロミスの状態を変更することができます。
例
1. ( プロデュース ) 遅延オブジェクトを使用するのは、独自の関数にプロミスサポートを提供したい場合です。値を計算し、プロミスが解決されるタイミングを制御したい場合です。
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
2. ( 前方 ) もし、それ自体がプロミスを返す関数を呼び出しているのであれば、独自のディファード・オブジェクトを作成する必要はないでしょう。そのプロミスを返せばいいのです。この場合、関数は値を生成するのではなく、(一種の)転送を行います。
function fetchData() {
// do some configuration here and pass to `$.ajax`
return $.ajax({...});
}
fetchData().done(function(response) {
// ...
});
3. ( 受け取る ) 時には、約束や値を作ったり渡したりするのではなく、それらを直接使いたい、つまり、ある情報の受信者になりたい場合があります。
$('#my_element').fadeOut().promise().done(function() {
// called when animation is finished
});
もちろん、これらすべてのユースケースを混在させることも可能です。あなたの関数は、(例えばAjaxの呼び出しから)値を受け取り、それに基づいて別の値を計算する(生成する)ことができます。
関連する質問
関連
-
[解決済み] Foundation Revealモーダルjavascriptを開く方法
-
[解決済み] jQuery .load()が動作しない
-
[解決済み] jQueryを使って入力が空かどうかをチェックする
-
[解決済み] jQuery On Clickが動作しない
-
[解決済み] BootstrapがUncaught Errorを投げる:BootstrapのJavaScriptはjQueryを必要とする【終了】。
-
[解決済み] セレクトした要素の外側のHTMLを取得する
-
[解決済み】JavaScriptのDeferred、Promise、Futureの違いは何ですか?
-
[解決済み】HTML要素にデータ属性を設定する方法
-
[解決済み】jQuery deferredはどのように使用することができますか?
-
[解決済み] .then()チェーンで以前のプロミス結果にアクセスするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQuery - 不正な呼び出し
-
[解決済み] jQuery が Ajax 呼び出しの終了を待って戻るようにするにはどうすればよいですか?
-
[解決済み] 無効な JSON プリミティブ ERROR
-
[解決済み] jQuery.whenの理解
-
[解決済み] Vimeoのコントロールを非表示にする方法
-
[解決済み] jquery-rails」と「jquery-ui-rails」は、1つのプロジェクトで管理することができるのでしょうか?
-
[解決済み] jQuery slidetoggleが動作しない?[クローズド]
-
[解決済み] jQueryの再帰性が高すぎる
-
[解決済み】JavaScriptのDeferred、Promise、Futureの違いは何ですか?
-
[解決済み】jQuery deferredはどのように使用することができますか?