jQuery_jquery の Deferred と Promise の違い

WBOY
リリース: 2016-05-16 15:06:39
オリジナル
1126 人が閲覧しました

Deferred と Promise の違いは何ですか?

約束

Promise は、非同期関数によって返されるオブジェクトです。このような関数を自分で書きたい場合は、deferred を使用する必要があります。

var promise = $.ajax({
url: "/myServerScript"
});
promise.done(mySuccessFunction); 
promise.fail(myErrorFunction); 
var promise = $.ajax({
url: "/myServerScript"
}); 
promise.then(mySuccessFunction,myErrorFunction); 
ログイン後にコピー

Promise を使用する利点は次のとおりです:

done() 関数とfail() 関数を複数回呼び出して、異なるコールバック関数を使用できます。おそらく、アニメーションを停止するコールバック関数が 1 つ、新しい AJAX リクエストを開始するコールバック関数が 1 つ、受信したデータをユーザーに表示するコールバック関数が 1 つあるとします。

var promise = $.ajax({ url: "/myServerScript" });
promise.done(myStopAnimationFunction); promise.done(myOtherAjaxFunction); 
promise.done(myShowInfoFunction); promise.fail(myErrorFunction);
ログイン後にコピー

AJAX 呼び出しが完了した後でも、done() 関数とfail() 関数を呼び出すことができ、コールバック関数をすぐに実行できます。異なる状態間で変数を混同することはありません。 AJAX 呼び出しが終了すると、成功または失敗のステータスが維持され、このステータスは変わりません。

Promise をマージできます。場合によっては、2 つの AJAX リクエストを同時に行う必要があり、両方の AJAX リクエストが成功したときに関数を呼び出したいことがあります。このタスクを実行するには、新しい $.when() 関数を使用する必要があります:

var promise1 = $.ajax("/myServerScript1"); 
var promise2 = $.ajax("/myServerScript2");
$.when(promise1, promise2).done(function(xhrObject1, xhrObject2) { // 处理两个XHR对象 });
ログイン後にコピー

延期

簡単に言うと、遅延オブジェクトは jQuery のコールバック関数ソリューションです。英語で defer は「遅延」を意味するため、deferred オブジェクトの意味は、将来の特定の時点まで実行を「遅らせる」ことです。

遅延オブジェクトは Promise オブジェクトと同じことを実行できますが、done() 関数とfail() 関数をトリガーする 2 つの関数があります。

遅延オブジェクトには、成功した結果を処理し、done() に関連する関数を実行するための replace() 関数があります。 request() 関数は、失敗した結果を処理し、fail() に関連する関数を実行するために使用されます。

resolve() 関数とreject() 関数の両方にパラメータを指定すると、それらは両方ともdone() とfail() に関連するコールバック関数に渡されます。

概要

jQuery の ajax は、done()、fail() メソッドを含む Promise オブジェクトを返します。遅延は、この Promise オブジェクトを返すプロセスです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!