目次
説明
deferred.always()
##パラメータの説明
返回值
示例&说明
语法
参数说明
戻り値
deferred.isRejected() は
deferred.isResolved()
小知识
String 型を返します
ホームページ ウェブフロントエンド フロントエンドQ&A jquery遅延オブジェクトとは何ですか

jquery遅延オブジェクトとは何ですか

Nov 02, 2022 pm 05:58 PM
jquery 遅延オブジェクト

jquery 遅延オブジェクトは「Deferred」です。これは、jQuery.Deferred() メソッドを呼び出すことによって作成されるリンク可能なユーティリティ オブジェクトです。遅延オブジェクトはチェーン可能であり、jQuery オブジェクトがチェーン可能である方法と似ていますが、独自のメソッドがある点が異なります。複数のコールバック関数をコールバック リストに登録し、コールバック リストを呼び出し、非同期または同期の成功または失敗を渡すことができます。機能の状態。

jquery遅延オブジェクトとは何ですか

このチュートリアルの動作環境: Windows7 システム、jquery3.6.1 バージョン、Dell G3 コンピューター。

jQuery 1.5 で導入された Deferred オブジェクトは、jQuery.Deferred() メソッドを呼び出すことによって作成されるリンク可能なユーティリティ オブジェクトです。複数のコールバック関数をコールバック リストに登録し、コールバック リストを呼び出して、非同期関数または同期関数の成功または失敗ステータスを渡すことができます。

遅延オブジェクトは、独自のメソッドを持つことを除いて、jQuery オブジェクトがチェーン可能である方法と同様にチェーン可能です。 Deferred オブジェクトを作成した後、次のいずれかのメソッドを使用して、1 つ以上のメソッドを呼び出して作成または保存されたオブジェクトに直接リンクできます。

#リスト

関数説明##$.Deferred() は、連鎖ユーティリティ オブジェクト メソッドを返して複数のコールバックを登録し、コールバック キューを呼び出して同期または非同期関数の成功または失敗のステータスを渡すために使用されます。 #deferred.always()deferred .done()deferred.fail() deferred.progress()deferred.isRejected()##deferred.isResolved()進行中のコールバックにパラメータを渡すために使用##deferred .notifyWith() はパラメータとコンテキスト オブジェクトを進行中のコールバックに渡すために使用されます。deferred.reject() は遅延オブジェクトを拒否し、パラメータを失敗コールバック関数deferred.rejectWith() は、遅延オブジェクトを拒否し、パラメータとコンテキスト オブジェクトを失敗コールバック関数に渡すために使用されますdeferred.resolve() は、遅延オブジェクトを解決し、doneCallbacks コールバック関数にパラメータを渡すために使用されます。 ) は、遅延オブジェクトを解決し、パラメーターとコンテキスト オブジェクトを DoneCallbacks コールバック関数に渡すために使用されます。deferred.state() は、次の目的で使用されます。遅延オブジェクトの現在の状態を決定します##deferred.pipe()deferred.then() は、Deferred オブジェクトが拒否されたときに追加されたハンドラーを呼び出すために使用されます。 Deferred (遅延) Promise オブジェクトを返すために使用されますPromise オブジェクトを返し、コレクションにバインドされた特定のタイプのすべてのアクションがキューに追加されたかどうかを監視するために使用されます。
Deferred オブジェクトが受け入れられるか拒否されるときに、追加されたハンドラーを呼び出すために使用されます
Deferred (遅延) オブジェクトが受け入れられたときに、追加されたハンドラーを呼び出すために使用されます
に使用されます。 Deferred (遅延) オブジェクトが拒否されたときに、追加されたハンドラーを呼び出します。
Deferred (遅延) オブジェクトが進行状況通知を生成するときに使用されます。 、追加ハンドラーを呼び出します
1.8- Deferred オブジェクトが拒否されました
1.8-オブジェクトが拒否されたかどうかを判断するために使用されます #deferred.notify()
関数によって返される状態または遅延オブジェクトをフィルターするために使用されます。 value
は、Deferred オブジェクトが解決されるか拒否されるか、まだ進行中の場合に追加ハンドラーを呼び出すために使用されます。 deferred.catch()
deferred.promise()
.promise()

説明

$.Deferred()

$.Deferred() はコンストラクターであり、次の目的で使用されます。連鎖ユーティリティ オブジェクト メソッドを返して複数のコールバックを登録し、コールバック キューを呼び出し、同期関数または非同期関数の成功または失敗のステータスを渡します。

ヒント:

    ##$.Deferred() コンストラクターは、新しい Deferred (遅延) オブジェクトを作成します。jQuery.Deferred
  • は、遅延された選択された関数を渡すことができます。コンストラクターが戻る前に呼び出され、関数の最初のパラメーターとして新しい Deferred オブジェクトが渡されます。たとえば、呼び出される関数は deferred.then() を使用してコールバック関数をアタッチできます。
  • 遅延オブジェクトは保留状態で開始されます。 deferred.then()、deferred.always()、
  • deferred.done()、または deferred.fail() を使用してこのオブジェクトに追加されたコールバック関数は、実行のためにキューに入れられます。
遅延を解決された状態に移行した直後に、deferred.resolve() または eferred.resolveWith() を呼び出して、設定された

donedCallbacks を実行します。
deferred.reject() または deferred.rejectWith() を呼び出した直後に、設定されたfailCallbacksを実行して、遅延を拒否状態に変換します。オブジェクトが解決済みまたは拒否された状態になると、その状態のままになります。解決または拒否された Deferred オブジェクトにコールバックを追加することもできます。コールバックはすぐに実行されます。
#Syntax

$.Deferred( [beforeStart ] )
  • ##jQuery1.5 でこの関数が追加されました ##パラメータの説明

パラメータ

説明#関数の種類 コンストラクターが返す前に呼び出される関数
beforeStart
戻り値jQuery.Deferred() ファクトリ関数の作成 新しい遅延オブジェクト。

deferred.always()


Deferred (遅延) オブジェクトが受け入れられるか拒否されるときは、 deferred.always ( ) ハンドラーを追加しました。

ヒント: パラメーターには関数または関数の配列を指定できます。 deferred.always() は Deferred オブジェクトを返すため、追加の .always メソッドを含む、他の遅延オブジェクト メソッド (ここでは Deferred オブジェクトを呼び出し続けることができるメソッドを指します ) に接続できます。 Deferred オブジェクトが解決または拒否されると、 deferred.always() 経由で追加されたコールバック関数が追加された順序で実行され、引数として次のメソッドに渡すことができます:solve 、reject 、resolveWith または raiseWith 。 #構文

deferred.always( alwaysCallbacks [, alwaysCallbacks ] )

jQuery1.6 でこの関数が追加されました

##パラメータの説明

パラメータ

説明

alwaysCallbacksオプション/関数タイプ 注: deferred.always () メソッドは、Deferred オブジェクトの .resolve() または .reject() で使用されるパラメータを受け取りますが、これらは多くの場合大きく異なります。このため、パラメータをチェックせずにその動作をそのまま使用することが最善です。ほとんどの場合、パラメーターが既知であるため、明示的な .done() または .fail() ハンドラーを使用します。 戻り値例と説明jQuery.get() メソッドは値を返しますjqXHR オブジェクトの Deferred (遅延) オブジェクトから、deferred.always () メソッドを使用して成功とエラーのコールバックをアタッチできます。jQuery サンプル コード:
Deferred オブジェクトが解決または拒否されたときに呼び出される関数または関数の配列
deferred.always() は Deferred (遅延) オブジェクトを返します
 $.get( "test.php" ).always(function() {
    alert( "带有成功和错误的回调参数的$.get方法已完成。" );
 })
ログイン後にコピー

#deferred .done()

Deferred (遅延) オブジェクトが受け入れられると、ハンドラーは

遅延オブジェクト関数 deferred.done()## によって追加されます。 # が呼び出されます。

ヒント: このメソッドは 1 つ以上のパラメーターを受け入れます。 deferred.done() は、追加の .done() メソッドを含む、他の遅延オブジェクト メソッド (引き続き Deferred オブジェクトのメソッドの呼び出し) に接続できる Deferred オブジェクトを返します。 Deferred オブジェクトが解決されると、deferred.done() によって追加されたコールバック関数が追加された順序で実行され、resolve メソッド、resolveWith メソッドにパラメーターとして渡すことができます。 #Syntax<span style="font-size: 18px;"></span>deferred.done( doneCallbacks [, donedCallbacks ] )

jQuery1.5 でこの関数が追加されました ##パラメータの説明

パラメータ
  • 説明

doneCallbacks

オプション/関数タイプ Deferred オブジェクトが解決されるときに呼び出される関数または関数の配列

返回值

deferred.done() 返回的是一个 Deferred 对象

示例&说明

HTML示例代码:

 <button>Go</button>
 <p>Ready...</p>
ログイン後にコピー

jQuery示例代码

function fn1() {
  $("p").append(" 1 ");
}
function fn2() {
  $("p").append(" 2 ");
}
function fn3(n) {
  $("p").append(n + " 3 " + n);
}

var dfd = $.Deferred();//创建一个延迟对象

//添加dfd被解决时需要的被调用的处理函数
dfd
.done( [fn1, fn2], fn3, [fn2, fn1] )// 连接一个函数或者函数数组
.done(function(n) {//可以连接其他的方法
  $("p").append(n + " we&#39;re done.");
});

//当点击按钮时修改延迟对象的状态为已解决
//此时调用通过deferred.done()添加的延迟对象被受理后的处理函数
$("button").bind("click", function() {
  dfd.resolve("and");//输出:1 2 and 3 and 2 1 and we&#39;re done.
});
ログイン後にコピー

<span style="font-size: 18px;">deferred.fail()</span>

当 Deferred (延迟)对象被拒绝时,调用通过deferred.fail()添加的处理程序。

提示:该方法接受一个或者多个参数。 deferred.fail() 返回的是一个 Deferred 对象, 可以连接其他的延迟对象方法(继续调用其他Deferred 对象的方法),包括额外的 .fail() 方法。当 Deferred 对象被拒绝时,通过deferred.fail()添加的回调函数 按它们被添加时的顺序执行,并且可以作为参数传递给如下的方法使用:deferred.resolve() 或 deferred.rejectWith()。

语法

  • deferred.fail( failCallbacks [, failCallbacks ] )

jQuery1.5新增该函数

参数说明

参数说明
failCallbacks可选/Function类型 一个函数或者函数数组,当Deferred(延迟)对象被拒绝时被调用

返回值

deferred.fail() 返回的是一个 Deferred 对象

示例&说明

jQuery示例代码

$(function () { 
    $.get("test.php")
        .done(function(){ alert("$.get 成功!"); })//解决时调用
        .fail(function(){ alert("$.get 失败!"); });//被拒绝时调用
})
ログイン後にコピー

<span style="font-size: 18px;">deferred.progress()</span>

deferred.progress() 函数当Deferred(延迟)对象生成进度通知时,调用添加处理程序。

注意:当通过调用 notify 或 notifyWith 使延迟对象产生进度通知时,progressCallbacks 就会被调用。 由于 deferred.progress()返回的是延迟对象,所以其它延迟对象方法可以链接到该对象上(链式调用)。当延迟对象被 resolved 或 rejected 时, 进度回调函数将不再被调用,但是当Deferred (延迟)进入resolved(解决) 或 rejected(拒绝)状态后,新添加任何的progressCallbacks将立即执行,使用的参数被传递给.notify() 或 notifyWith()调用

语法

  • deferred.progress( progressCallbacks[,progressCallbacks] )

jQuery 1.7 新增该函数

参数说明

参数说明
progressCallbacks可选/Function类型 一个函数或者函数数组,当Deferred(延迟)对象生成正在执行中的进度通知时被调用。

戻り値

deferred.progress() は Deferred オブジェクトを返します


##deferred.isRejected( )<span style="font-size: 18px;"></span>

deferred.isRejected() 関数は、Deferred オブジェクトが拒否されたかどうかを判断するために使用されます。

jQuery 1.7 では非推奨となっているため、代わりに deferred.state() を使用してください。

注:

    Deferred オブジェクトが拒否された状態にある場合は true を返します。これは、オブジェクトに対して deferred.reject() または deferred.rejectWith() が呼び出され、failCallbacks が呼び出された (または呼び出し中である) ことを意味します。
  • Deferred (遅延) オブジェクトには、pending (保留中)、resolved (解決済み)、rejected (拒否) の 3 つの状態があります。deferred.isResolved() を使用して、遅延オブジェクトが解決された状態であるかどうかを判断します。
構文

    deferred.isRejected()
この関数は jQuery 1.5 で追加され、1.7 で廃止され、削除されました1.8 では

##戻り値

deferred.isRejected() は

Boolean 型を返します


# #deferred.isResolved()<span style="font-size: 18px;"></span>deferred.isResolved() 関数は、Deferred オブジェクトが解決されたかどうかを判断するために使用されます。

jQuery 1.7 では非推奨となっているため、代わりに deferred.state() を使用してください。

注:

Deferred オブジェクトが解決された状態にある場合は true を返します。これは、オブジェクトに対して deferred.resolve() または deferred.resolveWith() が呼び出され、doneCallbacks が呼び出された (または呼び出されている途中である) ことを意味します。

    Deferred (遅延) オブジェクトには、pending (保留中)、resolved (解決済み)、rejected (拒否) の 3 つの状態があります。deferred.isRejected() を使用して、遅延オブジェクトが拒否された状態であるかどうかを判断します。
  • 構文

deferred.isResolved()

  • この関数は jQuery 1.5 で追加され、1.7 で廃止され、削除されました1.8 では
##戻り値

deferred.isResolved() は
Boolean 型を返します

# #deferred.notify()

<span style="font-size: 18px;">deferred.notify() 関数は、パラメーターを設定し、呼び出される遅延オブジェクトのコールバック関数 (progressCallbacks) に渡すために使用されます。 。 </span>注:

通常、このメソッドを呼び出すことができるのは、遅延オブジェクト (Deferred) の作成者だけです。

deferred.promise() を呼び出して制限された Promise オブジェクトを返すことで、他のコードが遅延オブジェクトの状態を変更したり、その状態を報告したりするのを防ぐことができます。

    deferred.notify にアクセスすると、deferred.then または deferred.progress にアクセスすることで、progressCallback を追加できます。コールバックは追加された順序で実行されます。
  • .notify() から呼び出し元の遅延オブジェクトのコールバック関数にパラメーターを渡し、遅延オブジェクトが
  • 解決または拒否された後に任意の関数を呼び出します。notify() (または progressCallbacks を追加)
  • は無視されます

Syntax<br/><br/>deferred.notify( args )

    jQuery 1.7 追加この関数
  • ##パラメータの説明

パラメータ
##説明

オプション/オブジェクト タイプ 進行中のコールバック (progressCallbacks) にオプションのパラメーターを渡します
#args

返回值

deferred.notify() 返回的是一个 Deferred 对象

小知识

jQuery提供的deferred.promise()方法的作用是,在原来的Deferred 对象上返回另一个 Deferred 对象,即受限制的 Promise 对象,受限制的 Promise 对象只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。

首先看一个 Deferred对象的执行状态被改变的例子:

var dtd = $.Deferred(); // 新建一个Deferred对象
var wait = function(dtd){
  var tasks = function(){
    alert("执行完毕!");
    dtd.resolve(); // 改变Deferred对象的执行状态
  };
  setTimeout(tasks,5000);
  return dtd;
};
$.when(wait(dtd))
.done(function(){ alert("等待执行!"); })
.fail(function(){ alert("出错啦!"); });
//代码的尾部加了一行dtd.resolve(),这就改变了dtd对象的执行状态,因此导致done()方法立刻执行
dtd.resolve();// 改变Deferred对象的执行状态
ログイン後にコピー

再看一个 Deferred对象返回deferred.promise()的例子:

var wait = function(){
  var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象
  var tasks = function(){
    alert("执行完毕!");
    dtd.resolve(); // 改变Deferred对象的执行状态
  };

  setTimeout(tasks,5000);
  return dtd.promise(); // 返回promise对象
};
$.when(wait())
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });
ログイン後にコピー

wait()函数返回的是promise对象。dtd.promise().resolve()方法不存在,因此无法改变状态,然后,我们把回调函数绑定在这个对象上面,而不是原来的deferred对象上面。

这样的好处是,无法改变promise对象的执行状态,要想改变执行状态,只能操作原来的deferred对象。


<span style="font-size: 18px;">deferred.notifyWith()</span>

deferred.notifyWith() 函数用于给定上下文和参数,传递给正在调用的延迟对象上进行的回调函数( progressCallbacks )。

注意:

  • 通常,只有延迟对象(Deferred)的创建者才能调用此方法。
  • 你可以通过调用 deferred.promise() 返回一个受限的 Promise 对象,来阻止其它代码改变延迟对象的状态或报告它的状态。
  • 当 deferred.notifyWith 被调用时, 任何 progressCallbacks 可以通过访问 deferred.then 或者 deferred.progress 来添加。回调 依照他们添加时的顺序执行。

通过 .notifyWith() 传递参数给每个回调函数,当迟延对象已经被 resolved 或被 <br/> rejected 之后,再调用任何 .notifyWith() (或者添加 progressCallbacks) 都会被忽略。

语法

  • deferred.notifyWith( context [, args ] )

jQuery 1.7 新增该函数

参数说明

参数说明
contextObject类型 作为this对象,传递给进行中的回调(progressCallbacks)
argsArray类型 传递一个可选的参数给进行中的回调(progressCallbacks)

返回值

deferred.notifyWith() 返回的是一个 Deferred 对象


<span style="font-size: 18px;">deferred.reject()</span>

deferred.reject() 函数用于拒绝延迟对象,并根据给定的参数调用任何 failCallbacks 回调函数。

注意:

  • 通常只有延迟对象的创建者才可以调用该方法。你可以通过调用 deferred.promise(),返回一个受限的 Promise 对象,来阻止其它代码改变延迟对象的状态或报告它的状态。
  • 当延迟对象被 rejected 时,任何通过 deferred.then 或 deferred.fail 添加的 failCallbacks,都会被调用。回调函数按它们被添加时的顺序执行。传递给 deferred.reject() 的 args 参数,会传给每个回调函数。当延迟对象进入 rejected 状态后,任何 failCallbacks 被添加时,就会被立刻执行,并带上传入给 .reject() 的参数。

语法

  • deferred.reject( args )

jQuery1.5新增该函数

参数说明

参数说明
argsObject类型 传递一个可选的参数给失败的回调(failCallbacks)

戻り値

deferred.reject() は Deferred オブジェクトを返します


<span style="font-size: 18px;">deferred.rejectWith( )</span>

deferred.rejectWith() 関数は、遅延オブジェクトを拒否し、指定されたコンテキストと引数パラメーターに基づいて、failCallbacks コールバック関数を呼び出すために使用されます。

注:

  • 通常、このメソッドを呼び出すことができるのは、遅延オブジェクトの作成者だけです。制限された Promise オブジェクトを返す deferred.promise() を呼び出すことで、他のコードが遅延オブジェクトの状態を変更したり、その状態を報告したりするのを防ぐことができます。
  • 遅延オブジェクトが拒否されると、deferred.then または deferred.fail を通じて追加されたfailCallbacksが呼び出されます。コールバック関数は追加された順序で実行されます。 deferred.reject() に渡される args パラメータは、各コールバック関数に渡されます。遅延オブジェクトが拒否状態になると、追加されたfailCallbacksは、.reject()に渡されたパラメータを使用してただちに実行されます。
#構文

##deferred.rejectWith( context [, args ] )
  • jQuery1.5 でこの関数が追加されました

パラメータの説明

パラメータ説明コンテキスト オブジェクトを失敗コールバック (failCallbacks) に渡す配列タイプ#deferred.rejectWith() は Deferred オブジェクトを返します
オブジェクト タイプ##args
渡す失敗したコールバック (failCallbacks) へのオプションのパラメータ #戻り値

deferred.resolve()


deferred.resolve() 関数 Deferred (遅延) オブジェクトを解決するにはそして、指定された args パラメータに従ってコールバック関数 DoneCallbacks を完了します。 <span style="font-size: 18px;"></span>注:

通常、このメソッドを呼び出すことができるのは、遅延オブジェクトの作成者だけです。制限された Promise オブジェクトを返す deferred.promise() を呼び出すことで、他のコードが遅延オブジェクトの状態を変更したり、その状態を報告したりするのを防ぐことができます。

遅延オブジェクトが解決されると、deferred.then または deferred.done を通じて追加された DoneCallbacks が呼び出されます。コールバック関数は追加された順序で実行されます。 deferred.resolve() に渡される args パラメータは、各コールバック関数に渡されます。遅延オブジェクトが解決済み状態になると、追加された DoneCallbacks は .resolve() に渡されたパラメーターを使用して即座に実行されます。

    構文
  • deferred.resolve( args )

jQuery1.5 でこの関数が追加されました
  • パラメータの説明

パラメータ

説明オブジェクトタイプ オプションのパラメータを完了コールバック関数 (doneCallbacks) に渡します deferred.resolve () Deferred オブジェクトを返します
args
戻り値

##deferred.resolveWith()


#deferred。 solveWith() 関数は、Deferred (遅延) オブジェクトを解決し、指定された context および args パラメーターに基づいてコールバック関数 dononeCallbacks を完了するために使用されます。 注: <span style="font-size: 18px;"></span> 通常、このメソッドを呼び出すことができるのは、遅延オブジェクトの作成者だけです。制限された Promise オブジェクトを返す deferred.promise() を呼び出すことで、他のコードが遅延オブジェクトの状態を変更したり、その状態を報告したりするのを防ぐことができます。

遅延オブジェクトが解決されると、deferred.then または deferred.done を通じて追加された DoneCallbacks が呼び出されます。コールバック関数は追加された順序で実行されます。 deferred.resolve() に渡される args パラメータは、各コールバック関数に渡されます。遅延オブジェクトが解決済み状態になると、追加された DoneCallbacks は .resolve() に渡されたパラメーターを使用して即座に実行されます。

構文

  • deferred.resolveWith( context [, args ] )
jQuery1.5 でこの関数が追加されました

    パラメータの説明

パラメータ

説明

オブジェクト型 コンテキスト オブジェクトを完了コールバック関数 (doneCallbacks) に渡します
コンテキスト
args配列型 オプションのパラメータを完了コールバック関数 (doneCallbacks) に渡します

戻り値

deferred.resolveWith() は Deferred オブジェクトを返します


<span style="font-size: 18px;">deferred.state( )</span>

#deferred.state() 関数は、Deferred オブジェクトの現在の状態を確認するために使用されます。

主にデバッグに使用されます。たとえば、遅延オブジェクトを拒否する準備をする前に、それがすでに解決された状態にあるかどうかを確認します。

注: deferred.state() メソッドは、Deferred オブジェクトの現在の状態を表す文字列を返します。遅延オブジェクトは、次の 3 つの状態のいずれかになります。

    "
  • pending": 遅延オブジェクトは、未完了の状態です。
  • "
  • resolved" : Deferred オブジェクトは解決された状態にあります。これは、オブジェクトの deferred.resolve() または deferred.resolveWith() が呼び出され、doneCallbacks が完了したことを意味します。呼び出された (または呼び出される途中)
  • "
  • rejected" : Deferred オブジェクトは拒否された状態にあります。これは、オブジェクトの deferred.reject() または を意味します。 requestWith() が呼び出され、failCallbacks が呼び出されています (または呼び出されている途中です)。
  • #構文

deferred.state()
jQuery1.7 でこの関数が追加されました

#戻り値

deferred.state() は

String 型を返します


deferred.pipe() <span style="font-size: 18px;"></span>#deferred.pipe() 関数は、遅延オブジェクトのフィルタリングやチェーン化を行うためのユーティリティ メソッドです。

注:

jQuery 1.8 以降、deferred.pipe() メソッドは廃止されました

。代わりに deferred.then() を使用してください。

jQuery 1.8 では、deferred.pipe() メソッドは廃止されたため、代わりに deferred.then() を使用する必要があります。

deferred.pipe() メソッドは新しい Promise オブジェクトを返します。

は、関数

によって返される遅延オブジェクトのステータスまたは値をフィルタリングするために使用されます。対応する Promise オブジェクトに渡されます。 doned() メソッドとfail() メソッド doneFilter 関数とfailFilter 関数は、元の遅延 (遅延) 解決/拒否のステータスと値をフィルタリングします。 jQuery 1.7 以降、このメソッドは、遅延 (遅延) にアクセスするすべての Notice メソッドまたは NotifyWith メソッドをフィルタリングする progressFilter 関数も受け入れます。
これらのフィルターは、pipe() によって返された Promise オブジェクトの Done() または failed() コールバック関数が呼び出されたときに新しい値を返すことも、他の表示可能なオブジェクト (Deferred、Promise など) を返すこともできます。これらの可視オブジェクト
は、独自の解決/拒否

ステータス

を渡し、 戻り値 をパイプ Promise コールバック関数に渡します。 フィルター関数として null が使用されている場合、またはフィルター関数が指定されていない場合、パイプ Promise が受け入れられる (解決) または拒否される (拒否) ときに、元の値と同じ値が使用されます。 #Syntax

deferred.pipe( [doneFilter ] [,failFilter ] )

## この関数は jQuery 1.6 で追加され、現在では廃止されています。 1.8
deferred.pipe( [doneFilter ] [,failFilter ] [, progressFilter ] )

この関数は jQuery 1.7 で追加されました。 1.8 では廃止されました
  • パラメータの説明

パラメータ

説明 ##doneFilter関数の種類 遅延が解決されたときに呼び出されるオプションの関数failFilter 遅延が拒否されたときに呼び出されるオプションの関数 progressFilter 進捗通知が拒否されたときに呼び出されるオプションの関数Deferred(遅延) に送信される名前は # です

返回值

deferred.pipe() 返回的是一个 * Promise对象*

示例&说明

过滤解决值:

var defer = $.Deferred(),
   filtered = defer.pipe(function( value ) {//当延迟对象解决时被调用
       // 传递给 pipe promise 回调函数的返回的值为10
        return value * 2;
    });
defer.resolve( 5 );//延迟对象被解决  调用pipe() return 10
filtered.done(function( value ) {//filtered 传递之前返回的值 10
    alert( "值是(2*5 =) 10: " + value );//弹出框输出:值是(2*5 =) 10:10
});
ログイン後にコピー

过滤拒绝值:

var defer = $.Deferred(),
//延迟得到解决时调用回调函数为null
//延迟得到拒绝的回调函数传递值value * 3 给Promise对象filtered 的fail的回调函数
        filtered = defer.pipe( null, function( value ) {
            return value * 3;
        });

    defer.reject( 6 );//延迟对象被拒绝 调用pipe() return 18
    filtered.fail(function( value ) {
     alert( "值是(3*6=)18:" + value );//弹出框输出:值是(3*6 =) 18:18
    });
ログイン後にコピー

链任务(?)

var request = $.ajax( url, { dataType: "json" } ),
    chained = request.pipe(function( data ) {
        //request返回值给url2
        return $.ajax( url2, { data: { user: data.userId } } );
    });

    chained.done(function( data ) {
        // 通过第一个请求取回data值提供给URL2
    });
ログイン後にコピー

<span style="font-size: 18px;">deferred.then()</span>

deferred.then() 函数当Deferred(延迟)对象被解决/拒绝或仍在进行中时,调用添加处理程序。

注意:

  • 如果没有这种类型的回调是需要的,参数可以为 null 。或者使用.done(),.fail()或者 .progress()设置只有一种未经过滤的状态或值的回调类型。
  • 从jQuery 1.8开始, 方法返回一个新的 promise ,可以通过一个函数过滤延迟对象的状态和值,用来替换现在过时的deferred.pipe() 方法。
  • 回调是依照他们被添加时的顺序执行的,由于 deferred.then 返回 Promise 对象,可以链接其它的 Promise 对象,包括附加的 .then() 方法。

doneFilter 和 failFilter函数过滤原延迟对象的解决/拒绝的状态和值。
progressFilter 函数过滤任何调用原有的延迟对象的notify 和 notifyWith的方法。
这些过滤器函数可以返回一个新的值传递给的 Promise 对象的.done() 或 .fail() 回调,或他们可以返回另一个观察的对象(延迟对象,Promise 对象等)传递给它的解决/拒绝的状态和值,Promise 对象的回调。
如果过滤函数是空,或没有指定,promise(承诺)将得到与原来值相同解决(resolved)或拒绝(rejected)。

语法

  • deferred.then( doneFilter [, failFilter ] [, progressFilter ] )

    jQuery1.8新增该函数

  • deferred.then1.8-( doneCallbacks, failCallbacks)

    jQuery1.5新增该函数,1.8移除

  • deferred.then1.8-( doneCallbacks, failCallbacks[, progressFilter ] )

    jQuery1.7新增该函数,1.8移除

参数说明

関数タイプ
関数タイプ
参数说明
doneFilterFunction类型 可选 当Deferred(延迟)对象得到解决时被调用的一个函数
failFilterFunction类型 可选 当Deferred(延迟)对象得到拒绝时被调用的一个函数
progressFilterFunction类型 可选 当Deferred(延迟)对象生成进度通知时被调用的一个函数调用
doneCallbacksFunction类型 当Deferred(延迟)对象得到解决时被调用的一个函数或函数数组
failCallbacksFunction类型 当Deferred(延迟)对象得到拒绝时被调用的一个函数或函数数组
progressCallbacksFunction类型 当Deferred(延迟)对象生成进度通知时被调用的一个函数或函数数组

返回值

deferred.then() 返回 Promise 对象

示例&说明

HTML代码:

<button>过滤解决值</button>
<p></p>
ログイン後にコピー

过滤解决值:

var filterResolve = function() {
    var defer = $.Deferred(),
        //当延迟对象解决时被调用
        //过滤解决值给then()的返回Promise对象的完成回调函数
        filtered = defer.then(function( value ) {
            return value * 2;
        });

    defer.resolve( 5 );

    //添加Promise对象的完成回调函数
    filtered.done(function( value ) {
        $( "p" ).html( "值是 ( 2*5 = ) 10: " + value );
    });
};
$( "button" ).on( "click", filterResolve );
ログイン後にコピー

过滤拒绝值:

var defer = $.Deferred(),
//延迟得到解决时调用回调函数为null
//延迟得到拒绝的,回调函数过滤拒绝值 
//传递过滤的拒绝值 value * 3 给then()的返回Promise对象的拒绝回调函数fail
        filtered = defer.then( null, function( value ) {
            return value * 3;
        });

    defer.reject( 6 );//延迟对象被拒绝 调用then() return 18

    //then()的返回Promise对象添加拒绝回调函数,并获取过滤的拒绝值
    filtered.fail(function( value ) {
     alert( "值是(3*6=)18:" + value );//弹出框输出:值是(3*6 =) 18:18
    });
ログイン後にコピー

链任务(?)

var request = $.ajax( url, { dataType: "json" } ),
    chained = request.then(function( data ) {
        //request返回值给url2
        return $.ajax( url2, { data: { user: data.userId } } );
    });

    chained.done(function( data ) {
        // 通过第一个请求取回data值提供给URL2
    });
ログイン後にコピー

<span style="font-size: 18px;">deferred.catch()</span>

当Deferred对象被拒绝(reject)时,调用通过deferred.catch()添加的处理程序。

deferred.catch( fn ) 是 deferred.then( null, fn )的一个别名

语法

  • deferred.catch( failCallbacks )

jQuery 3.0 新增该函数

参数说明

参数说明
failCallbacksFunction类型 一个函数,当 Deferred 对象被拒绝(reject)时被调用

返回值

deferred.catch() 返回的是一个 Promise 对象

示例&说明

jQuery.get 方法返回一个jqXHR对象, 它是从Deferred对象派生的,当Deferred对象被拒绝(reject) 时,我们可以使用.catch方法来处理,jQuery示例代码:

$.get( "test.php" )
  .then( function() {
    alert( "$.get succeeded" );
  } )
  .catch( function() {
    alert( "$.get failed!" );
  } );
ログイン後にコピー

<span style="font-size: 18px;">deferred.promise()</span>

deferred.promise() 函数返回 Deferred(延迟)的 Promise 对象。

注意:

  • 方法允许一个异步函数阻止那些干涉其内部请求的进度(progress)或状态(status)的其它代码。

  • Promise 对象只包含 deferred 对象的一组方法,包括:done(),then(),fail(),isResolved(), isRejected(), always(), 这些方法只能观察一个 deferred 的状态;不包括任何用于改变状态的延迟方法(resolve, reject, notify, resolveWith, rejectWith, 和 notifyWith),因此Promise 对象无法更改 deferred 对象的内在状态

  • deferred.promise()也可以接受一个 target 参数,此时传入的 target 将被赋予 Promise 的方法,并作为结果返回,而不是创建一个新对象(这个方法可以用于在已经存在的对象上绑定 Promise 行为的情况)。

语法

  • deferred.promise( [target ] )

jQuery 1.5 新增该函数

参数说明

参数说明
targetObject类型 绑定 promise 方法的对象。

返回值

deferred.promise() 返回的是一个 Promise 对象

示例&说明

创建一个延迟对象,并设定两个延时时间是随机的定时器,分别用于受理(resolve)和拒绝(reject)延迟对象。无论哪一个先执行,都会调用其中一个回调函数。而另一个定时器则不会产生任何效果,因为在最先调用的那个定时器处理中,延迟对象已经处于完成状态(resolved 或 rejected 状态)。同时,还会设定一个定时器进度(progress)通知函数,用于进度通知处理,并在文档的 “body” 中显示 “working…”,以下为一次测试时的jQuery示例代码:

function asyncEvent(){
        var dfd = new jQuery.Deferred();

        var resolveValue=400+Math.random()*2000;
        var resolveTime=Math.floor(resolveValue)
        console.log("resolveTime"+resolveTime)//resolveTime:1890ms

        // 在一个随机的时间间隔之后 Resolve (解决状态)
        setTimeout(function(){
            dfd.resolve("欢呼");

        }, Math.floor(resolveTime));

        var rejectValue=400+Math.random()*2000;
        var rejectTime=Math.floor(rejectValue)
        console.log("rejectTime"+rejectTime)//rejectTime:1364ms

        // 在一个随机的时间间隔之后 reject (拒绝状态)
        setTimeout(function(){
            dfd.reject("对不起");
        },rejectTime);

        // 每半秒显示一个"working..."消息
        setTimeout(function working(){
            //"pending" : Deferred 对象是尚未完成状态
            //0ms 执行一次  500ms执行一次 1000ms执行一次
            //1364ms 执行  dfd.reject("对不起") 
            //传递拒绝值"对不起" 给拒绝过滤函数 alert( status+&#39;, 这次你失败了&#39; );
            if ( dfd.state() === "pending" ) {
                //向正在执行的Deferred 对象的回调函数列表传递参数
                dfd.notify("working... ");

                setTimeout(working, 500);
            }
        }, 1);

        // 返回 Promise 对象,调用者不能改变延迟对象
        return dfd.promise();
    }
    // 为异步函数附加一个done, fail, 和 progress 处理程序
//如果向 jQuery.when 传入一个延迟对象,那么会返回它的 Promise 对象(延迟方法的一个子集)
    $.when( asyncEvent() ).then(
        function(status){
            alert( status+&#39;, 事情进展顺利&#39; );
        },
        function(status){
            alert( status+&#39;, 这次你失败了&#39; );
        },
        function(status){
            $("body").append(status);
        }
    );
ログイン後にコピー

使用目标参数,产生现有对象的Promise对象:

// 现有对象
    var obj = {
        hello: function( name ) {
            alert( "Hello " + name );
        }
    },
    // 创建一个延迟 Deferred
    defer = $.Deferred();
    // 设置对象作为 promise
    defer.promise( obj );
    // Resolve (解决) 该对象
    defer.resolve( "John" );
    // 使用该对象作为 Promise,向受理列表中添加回调函数
    //延迟对象状态为解决,因此done 被调用
    obj.done(function( name ) {
        obj.hello( name ); //将弹出 "Hello John"
    }).hello( "Karl" ); // 将弹出 "Hello Karl";
ログイン後にコピー

<span style="font-size: 18px;">.promise()</span>

.promise() 函数返回一个 Promise 对象,观察某种类型被绑定到集合的所有行动,是否已被加入到队列中。

返回的 Promise 被链接到延迟对象上,保存在元素的 .data() 中。由于 .remove() 方法会移除元素上的 data,同时也会移除元素本身。所以,使用它会防止任何元素上未被受理的(unresolved) Promise 被受理(resolving)。如果有必要在元素的 Promise 被受理(resolved)之前,从 DOM 中移除该元素的话,请使用.detach() 来代替。之后再调用 .removeData()

注意:

  • .promise() 方法返回一个动态生成的 Promise,当绑定到集合中的所有特定动作(action)已经被加入或未被加入到队列中时,生成的 Promise 将被受理(resolve)。

语法

  • .promise( [type ] [, target ] )

jQuery 1.5新增

参数说明

参数说明
type可选/String类型 需要待观察队列类型。
target可选/PlainObject类型 将要绑定 promise 方法的对象。

默认情况下, type的值是”fx” ,这意味着返回被受理(resolve)的 Promise 对象的时机,是在所有被选中元素的动画都完成时发生的。

如果提供target参数,.promise()在该参数上添加方法,然后返回这个对象,而不是创建一个新的。它适用于在一个已经存在的对象上添加 Promise 行为的情况。

返回值

.promise()方法返回一个动态生成的 Promise对象

示例&说明

1.在一个没有激活动画的集合上调用 .promise()
相关的jQuery示例代码:

//在一个没有激活动画的集合上调用 .promise(),返回一个被受理(resolved)的 Promise
var div = $( "<div />" );
    div.promise().done(function( arg1 ) {
        //弹出 "true"
        alert( this === div && arg1 === div );
    });
ログイン後にコピー

2.当所有的动画结果时(包括那些在动画回调函数和之后添加的回调函数中初始化的动画),受理(Resolve)返回的 Promise,相关HTML代码 :

<style type="text/css">
//没有样式不易观察执行效果,因此添加样式设置
    div{
        height:100px;
        width:200px;
        border:2px solid #334455;
        margin-top:2px;
    }
</style>
<button>Go</button>
<p>准备...</p>
<div></div>
<div></div>
<div></div>
<div></div>
ログイン後にコピー

当所有的动画结果时(包括那些在动画回调函数和之后添加的回调函数中初始化的动画),受理(Resolve)返回的 Promise,相关jQuery代码

$( "button" ).on( "click", function() {
        $( "p" ).append( "已开始..." );

        $( "div" ).each(function( i ) {
            $( this ).fadeIn().fadeOut( 100 * ( i + 51 ) );
        });

        $( "div" ).promise().done(function() {
            $( "p" ).append( " 完成! " );
        });
    });
    //效果显示好像是等动画执行完成后才执行done()方法
ログイン後にコピー

使用 $.when() 语句(.promise() 方法使得在 jQuery 集合中实现它变成了可能),受理(Resolve)返回的 Promise

var effect = function() {
        return $("div").fadeIn(800).delay(1200).append(" fadeOut! ").fadeOut();
    };
    $("button").bind( "click", function() {
        $("p").append( " 已开始... ");
        $.when( effect() ).done(function() {
            $("p").append(" 完成! ");
        });
        //效果显示好像是等动画执行完成后才执行done()方法
    });
ログイン後にコピー

【推荐学习:jQuery视频教程web前端视频

以上がjquery遅延オブジェクトとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

jQueryのリファレンスメソッドを詳しく解説:クイックスタートガイド jQueryのリファレンスメソッドを詳しく解説:クイックスタートガイド Feb 27, 2024 pm 06:45 PM

jQuery 参照方法の詳細説明: クイック スタート ガイド jQuery は、Web サイト開発で広く使用されている人気のある JavaScript ライブラリであり、JavaScript プログラミングを簡素化し、開発者に豊富な機能を提供します。この記事では、jQuery の参照方法を詳しく紹介し、読者がすぐに使い始めるのに役立つ具体的なコード例を示します。 jQuery の導入 まず、HTML ファイルに jQuery ライブラリを導入する必要があります。 CDN リンクを通じて導入することも、ダウンロードすることもできます

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? Feb 28, 2024 pm 03:12 PM

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常​​、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

徹底した分析: jQuery の長所と短所 徹底した分析: jQuery の長所と短所 Feb 27, 2024 pm 05:18 PM

jQuery は、フロントエンド開発で広く使用されている高速、小型、機能豊富な JavaScript ライブラリです。 2006 年のリリース以来、jQuery は多くの開発者にとって最適なツールの 1 つとなっていますが、実際のアプリケーションでは、いくつかの利点と欠点もあります。この記事では、jQuery の長所と短所を詳しく分析し、具体的なコード例で説明します。利点: 1. 簡潔な構文 jQuery の構文設計は簡潔かつ明確であるため、コードの読みやすさと記述効率が大幅に向上します。例えば、

jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する Feb 28, 2024 pm 09:06 PM

タイトル: jQuery ヒント: ページ上のすべての a タグのテキストをすばやく変更する Web 開発では、ページ上の要素を変更したり操作したりする必要がよくあります。 jQuery を使用する場合、ページ内のすべての a タグのテキスト コンテンツを一度に変更する必要がある場合があります。これにより、時間と労力を節約できます。以下では、jQuery を使用してページ上のすべての a タグのテキストをすばやく変更する方法と、具体的なコード例を紹介します。まず、jQuery ライブラリ ファイルを導入し、次のコードがページに導入されていることを確認する必要があります: &lt

jQueryで要素の高さ属性を削除するにはどうすればよいですか? jQueryで要素の高さ属性を削除するにはどうすればよいですか? Feb 28, 2024 am 08:39 AM

jQueryで要素の高さ属性を削除するにはどうすればよいですか?フロントエンド開発では、要素の高さ属性を操作する必要が生じることがよくあります。要素の高さを動的に変更する必要がある場合や、要素の高さ属性を削除する必要がある場合があります。この記事では、jQuery を使用して要素の高さ属性を削除する方法と、具体的なコード例を紹介します。 jQuery を使用して高さ属性を操作する前に、まず CSS の高さ属性を理解する必要があります。 height 属性は要素の高さを設定するために使用されます

jQuery を使用してすべての a タグのテキスト コンテンツを変更する jQuery を使用してすべての a タグのテキスト コンテンツを変更する Feb 28, 2024 pm 05:42 PM

タイトル: jQuery を使用して、すべての a タグのテキスト コンテンツを変更します。 jQuery は、DOM 操作を処理するために広く使用されている人気のある JavaScript ライブラリです。 Web 開発では、ページ上のリンク タグ (タグ) のテキスト コンテンツを変更する必要が生じることがよくあります。この記事では、この目標を達成するために jQuery を使用する方法を説明し、具体的なコード例を示します。まず、jQuery ライブラリをページに導入する必要があります。 HTML ファイルに次のコードを追加します。

jQuery における eq の役割と応用シナリオを理解する jQuery における eq の役割と応用シナリオを理解する Feb 28, 2024 pm 01:15 PM

jQuery は、Web ページでの DOM 操作やイベント処理を処理するために広く使用されている人気のある JavaScript ライブラリです。 jQueryではeq()メソッドを利用して指定したインデックス位置の要素を選択しますが、具体的な使い方と応用シーンは以下の通りです。 jQuery では、 eq() メソッドは、指定されたインデックス位置にある要素を選択します。インデックス位置は 0 からカウントされます。つまり、最初の要素のインデックスは 0、2 番目の要素のインデックスは 1 などとなります。 eq() メソッドの構文は次のとおりです。 $("s

jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? Feb 29, 2024 am 09:03 AM

jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? jQuery を使用して DOM 要素を操作する場合、要素に特定の属性があるかどうかを判断する必要がある状況がよく発生します。この場合、jQuery が提供するメソッドを使用してこの関数を簡単に実装できます。以下では、jQuery 要素が特定の属性を持つかどうかを判断するために一般的に使用される 2 つの方法を紹介し、具体的なコード例を添付します。方法 1: attr() メソッドと typeof 演算子 // を使用して、要素に特定の属性があるかどうかを判断します

See all articles