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 オブジェクトを返すプロセスです。