Rumah  >  Artikel  >  hujung hadapan web  >  Apakah objek tertunda jquery

Apakah objek tertunda jquery

青灯夜游
青灯夜游asal
2022-11-02 17:58:042049semak imbas

Objek tertunda jquery ialah "Tertunda", iaitu objek utiliti boleh dipaut yang dicipta dengan memanggil kaedah jQuery.Deferred(). Objek tertunda boleh dirantai, serupa dengan cara objek jQuery boleh dirantai, kecuali ia mempunyai kaedah sendiri yang boleh mendaftarkan berbilang fungsi panggil balik ke senarai panggil balik, memanggil senarai panggil balik dan lulus kejayaan atau kegagalan tak segerak atau segerak; keadaan fungsi.

Apakah objek tertunda jquery

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi jquery 3.6.1, komputer Dell G3.

Diperkenalkan dalam jQuery 1.5, Objek tertunda ialah objek utiliti boleh dipaut yang dicipta dengan memanggil kaedah jQuery.Deferred(). Ia boleh mendaftarkan berbilang fungsi panggil balik ke senarai panggil balik, panggil senarai panggil balik dan lulus status kejayaan atau kegagalan fungsi tak segerak atau segerak.

Objek tertunda boleh dirantai, sama seperti cara objek jQuery boleh dirantai, kecuali objek itu mempunyai kaedahnya sendiri. Selepas mencipta objek Tertunda, anda boleh menggunakan mana-mana kaedah berikut untuk memaut terus ke objek yang telah dibuat atau disimpan dengan memanggil satu atau lebih kaedahnya.

Senarai

函数 说明
$.Deferred() 用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传递任何同步或异步功能成功或失败的状态。
deferred.always() 用于当Deferred(延迟)对象被受理或被拒绝时,调用添加的处理程序
deferred.done() 用于当Deferred(延迟)对象被受理时,调用添加的处理程序
deferred.fail() 用于当 Deferred (延迟)对象被拒绝时,调用添加的处理程序
deferred.progress() 用于当Deferred(延迟)对象生成进度通知时,调用添加处理程序
deferred.isRejected()1.8- 用来确定 Deferred 对象是否已被拒绝
deferred.isResolved()1.8- 用来确定 Deferred 对象是否已被拒绝
deferred.notify() 用于传递参数给进行中的回调
deferred.notifyWith() 用于传递参数,上下文对象给进行中的回调
deferred.reject() 用于拒绝延迟对象,并传递参数给失败回调函数
deferred.rejectWith() 用于拒绝延迟对象,并传递参数和上下文对象给失败回调函数
deferred.resolve() 用于解决延迟对象,并并传递参数给doneCallbacks 回调函数
deferred.resolveWith() 用于解决延迟对象,并并传递参数和上下文对象给doneCallbacks 回调函数
deferred.state() 用于确定一个Deferred(延迟)对象的当前状态
deferred.pipe() 用于过滤状态或通过函数返回的延迟对象的值
deferred.then() 用于当Deferred(延迟)对象被解决,拒绝或仍在进行中时,调用添加处理程序。
deferred.catch() 用于当Deferred对象被拒绝(reject)时,调用添加的处理程序。
deferred.promise() 用于返回 Deferred(延迟)的 Promise 对象
.promise() 用于返回一个 Promise 对象,观察某种类型被绑定到集合的所有行动,是否已被加入到队列中。

Penjelasan

$.Deferred()

$.Deferred() ialah pembina, digunakan Untuk kembalikan kaedah objek utiliti berantai untuk mendaftarkan berbilang panggilan balik dan memanggil baris gilir panggil balik, melepasi status kejayaan atau kegagalan mana-mana fungsi segerak atau tak segerak.

提示:

  • $.Deferred() constructor mencipta objek Tertunda (tertunda) baharu, jQuery.Deferred
    boleh melepasi fungsi pilihan, fungsi The dipanggil sebelum pembina kembali dan diluluskan objek Tertunda baharu sebagai parameter pertama fungsi. Contohnya fungsi yang dipanggil boleh menggunakan deferred.then() untuk melampirkan fungsi panggil balik.
  • Objek tertunda bermula dalam keadaan digantung. Sebarang fungsi panggil balik yang ditambahkan pada objek ini menggunakan deferred.then(), deferred.always(),
    deferred.done(), atau deferred.fail() akan beratur untuk pelaksanaan.

Memanggil deferred.resolve() atau eferred.resolveWith() melaksanakan set
doneCallbacks serta-merta selepas mengalihkan kelewatan kepada keadaan diselesaikan.
Melaksanakan set failCallbacks serta-merta selepas memanggil deferred.reject() atau deferred.rejectWith() untuk menukar kelewatan kepada keadaan tolak. Apabila objek telah memasuki keadaan diselesaikan atau ditolak, ia kekal dalam keadaan itu. Panggilan balik masih boleh ditambah pada objek Tertunda yang diselesaikan atau ditolak - ia dilaksanakan serta-merta.

Sintaks

  • $.Ditunda( [sebelum Mula] )

jQuery1.5 menambah fungsi ini

Perihalan Parameter

Fungsi
Parameter Penerangan
beforeStart
参数 说明
beforeStart Function类型 个在构造函数返回之前调用的函数
Jenis fungsi

dipanggil sebelum pembina mengembalikan

nilai pulangan

fungsi kilang jQuery.Deferred() mencipta objek tertunda baharu.

deferred.always()

Apabila objek Tertunda (tertunda) diterima atau ditolak, panggil deferred.always () tambah pengendali.

这里是指可以继续调用Deferred对象的方法Petua: Parameter boleh menjadi fungsi atau tatasusunan fungsi. Oleh kerana deferred.always() mengembalikan objek Deferred, kaedah objek tertunda lain (

) boleh disambungkan, termasuk kaedah .always tambahan. Apabila objek Tertunda diselesaikan atau ditolak, fungsi panggil balik yang ditambahkan melalui deferred.always() dilaksanakan mengikut urutan ia ditambah dan boleh dihantar sebagai hujah kepada kaedah berikut: resolve , reject , resolveWith atau rejectWith .

Syntax
  • deferred.always( alwaysCallbacks [, alwaysCallbacks ] )

jQuery1.6 menambah fungsi ini

Perihalan Parameter
参数 说明
alwaysCallbacks 可选/Function类型 一个函数或者函数数组,当Deferred(延迟)对象得到解决或被拒绝时被调用
tbody>
Parameter Penerangan
alwaysCallbacks

Pilihan/Jenis Fungsi

Fungsi atau tatasusunan fungsi yang dipanggil apabila objek Tertunda diselesaikan atau ditolak

Nota: Kaedah deferred.always() menerima parameter yang digunakan oleh .resolve() atau .reject() objek Deferred, yang selalunya sangat berbeza. Atas sebab ini, sebaiknya gunakan sahaja tingkah lakunya tanpa menyemak parameternya. Dalam kebanyakan kes, gunakan pengendali .done() atau .fail() eksplisit kerana parameternya diketahui.

Nilai Pulangan

deferred.always() mengembalikan objek Tertunda (tertunda)

Contoh & Penerangan

 $.get( "test.php" ).always(function() {
    alert( "带有成功和错误的回调参数的$.get方法已完成。" );
 })
kaedah jQuery.get() mengembalikan a daripada a Untuk objek jqXHR objek Tertunda (tertunda), kami boleh melampirkan panggilan balik kejayaan dan ralat menggunakan kaedah deferred.always(), kod contoh jQuery:

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

deferred.done()

通过延迟对象函数deferred.done()

Apabila objek Tertunda (tertunda) diterima, pengendali yang ditambah dengan

dipanggil.

Petua: Kaedah ini menerima satu atau lebih parameter. deferred.done() mengembalikan objek Tertunda yang boleh disambungkan kepada kaedah objek tertunda lain (terus memanggil kaedah objek Tertunda), termasuk kaedah .done() tambahan. Apabila objek Tertunda diselesaikan, fungsi panggil balik yang ditambahkan melalui deferred.done() dilaksanakan mengikut tertib ia ditambahkan, dan boleh dihantar sebagai parameter kepada kaedah berikut: resolve, resolveWith.
  • Syntax
deferred.done( doneCallbacks [, doneCallbacks ] )

jQuery1.5 menambah fungsi ini

参数 说明
doneCallbacks 可选/Function类型 一个函数或者函数数组,当Deferred(延迟)对象得到解决时被调用
Perihalan Parameter
Parameter Penerangan
doneCallbacks Pilihan/Jenis Fungsi Fungsi atau tatasusunan fungsi yang dipanggil apabila objek Tertunda diselesaikan

返回值

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(延迟)对象生成正在执行中的进度通知时被调用。

Nilai pulangan

deferred.progress() mengembalikan Objek tertunda


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

fungsi deferred.isRejected() digunakan untuk menentukan sama ada objek Deferred telah ditolak.

Tamat digunakan mulai jQuery 1.7, sila gunakan deferred.state() sebaliknya.

Nota:

  • Mengembalikan benar jika objek Tertunda berada dalam keadaan ditolak. Ini bermakna deferred.reject() atau deferred.rejectWith() telah dipanggil pada objek dan failCallbacks telah dipanggil (atau sedang dalam proses dipanggil).
  • Objek tertunda boleh mempunyai tiga keadaan: belum selesai, diselesaikan atau ditolak gunakan deferred.isResolved() untuk menentukan sama ada objek tertunda berada dalam keadaan diselesaikan.

Sintaks

  • deferred.isRejected()

Fungsi ini telah ditambah dalam jQuery 1.5, usang dalam 1.7 dan dialih keluar dalam 1.8

Nilai pulangan

deferred.isRejected() mengembalikan Jenis Boolean


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

Fungsi deferred.isResolved() digunakan untuk menentukan sama ada objek Deferred telah diselesaikan.

Tamat digunakan mulai jQuery 1.7, sila gunakan deferred.state() sebaliknya.

Nota:

  • Mengembalikan benar jika objek Tertunda berada dalam keadaan diselesaikan. Ini bermakna deferred.resolve() atau deferred.resolveWith() telah dipanggil pada objek dan doneCallbacks telah dipanggil (atau sedang dalam proses dipanggil).
  • Objek tertunda boleh mempunyai tiga keadaan: belum selesai, diselesaikan atau ditolak gunakan deferred.isRejected() untuk menentukan sama ada objek tertunda berada dalam keadaan ditolak.

Sintaks

  • deferred.isResolved()

Fungsi ini telah ditambahkan dalam jQuery 1.5, usang dalam 1.7 dan dialih keluar dalam 1.8

Nilai pulangan

deferred.isResolved() mengembalikan Jenis Boolean


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

Fungsi deferred.notify() digunakan untuk menetapkan parameter dan menghantarnya ke fungsi panggil balik (progressCallbacks) pada objek tunda yang dipanggil.

Nota:

  • Biasanya, hanya pencipta Tangguh boleh memanggil kaedah ini.
  • Anda boleh menghalang kod lain daripada menukar keadaan objek tertunda atau melaporkan keadaannya dengan memanggil deferred.promise() untuk mengembalikan objek Promise terhad.
  • Apabila deferred.notify diakses, sebarang progressCallbacks boleh ditambah dengan mengakses deferred.then atau deferred.progress. Panggilan balik dilaksanakan mengikut susunan ia telah ditambah.

通过来自.notify()的传递参数给正在调用的延迟对象上的回调函数,当迟延对象已经被 <br> resolved 或被 rejected 之后,再调用任何 .notify() (或者添加 progressCallbacks) 都会 <br> 被忽略

Syntax

  • deferred.notify( args )

jQuery 1.7 New This fungsi

Penerangan parameter

Parameter Penerangan
args
参数 说明
args 可选/Object类型 传递一个可选的参数给进行中的回调(progressCallbacks)
Pilihan/Jenis objek Hantar parameter pilihan kepada panggilan balik yang sedang berjalan (progressCallbacks)

返回值

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 新增该函数

参数说明

参数 说明
context Object类型 作为this对象,传递给进行中的回调(progressCallbacks)
args Array类型 传递一个可选的参数给进行中的回调(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新增该函数

参数说明

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

Nilai pulangan

deferred.reject() mengembalikan Objek tertunda


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

Fungsi deferred.rejectWith() digunakan untuk menolak objek tertunda dan memanggil sebarang fungsi panggil balik failCallbacks berdasarkan konteks dan parameter args yang diberikan.

Nota:

  • Biasanya hanya pencipta objek tertunda boleh memanggil kaedah ini. Anda boleh menghalang kod lain daripada menukar keadaan objek tertunda atau melaporkan keadaannya dengan memanggil deferred.promise(), yang mengembalikan objek Promise terhad.
  • Apabila objek tertunda ditolak, sebarang failCallbacks ditambahkan melalui deferred.then atau deferred.fail akan dipanggil. Fungsi panggil balik dilaksanakan mengikut susunan ia ditambah. Parameter args yang dihantar ke deferred.reject() akan dihantar ke setiap fungsi panggil balik. Apabila objek tertunda memasuki keadaan ditolak, sebarang failCallbacks yang ditambahkan akan dilaksanakan serta-merta dengan parameter dihantar ke .reject().

Syntax

  • deferred.rejectWith( context [, args ] )

jQuery1.5 menambah fungsi ini

Penerangan Parameter

Parameter Penerangan
konteks
参数 说明
context Object类型 传递一个对象给失败的回调(failCallbacks)
args Array类型 传递一个可选的参数给失败的回调(failCallbacks)
Jenis objek

Hantar objek kepada panggilan balik kegagalan (failCallbacks)

args td> Jenis tatasusunan

Hantar parameter pilihan kepada panggilan balik yang gagal (failCallbacks)

Nilai pulangandeferred.rejectWith() mengembalikan
Objek tertunda

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

deferred.resolve( ) fungsi digunakan untuk menyelesaikan objek Tertunda (tertunda) dan lengkapkan fungsi panggil balik doneCallbacks mengikut parameter args yang diberikan.
  • Nota:
  • Biasanya hanya pencipta objek tertunda boleh memanggil kaedah ini. Anda boleh menghalang kod lain daripada menukar keadaan objek tertunda atau melaporkan keadaannya dengan memanggil deferred.promise(), yang mengembalikan objek Promise terhad.

Apabila objek tertunda diselesaikan, sebarang Panggilan Balik done yang ditambahkan melalui deferred.then atau deferred.done akan dipanggil. Fungsi panggil balik dilaksanakan mengikut susunan ia ditambah. Parameter args yang dihantar ke deferred.resolve() akan dihantar ke setiap fungsi panggil balik. Apabila objek tertunda memasuki keadaan diselesaikan, sebarang doneCallbacks yang ditambahkan akan dilaksanakan serta-merta dengan parameter dihantar ke .resolve().

  • Sintaks
deferred.resolve( args )

jQuery1.5 menambah fungsi ini

参数 说明
args Object类型 传递一个可选的参数给完成回调函数(doneCallbacks)

Perihalan Parameter

Parameter Penerangan
args

Jenis objek Hantar parameter pilihan kepada fungsi panggil balik penyelesaian (doneCallbacks)

Nilai pulangan
deferred.resolve() mengembalikan

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

    Yang tertunda Fungsi .resolveWith() digunakan untuk menyelesaikan objek Tertunda (tertunda) dan melengkapkan fungsi panggil balik doneCallbacks berdasarkan konteks dan parameter args yang diberikan.
  • Nota:
Biasanya hanya pencipta objek tertunda boleh memanggil kaedah ini. Anda boleh menghalang kod lain daripada menukar keadaan objek tertunda atau melaporkan keadaannya dengan memanggil deferred.promise(), yang mengembalikan objek Promise terhad.

Apabila objek tertunda diselesaikan, sebarang Panggilan Balik done yang ditambahkan melalui deferred.then atau deferred.done akan dipanggil. Fungsi panggil balik dilaksanakan mengikut susunan ia ditambah. Parameter args yang dihantar ke deferred.resolve() akan dihantar ke setiap fungsi panggil balik. Apabila objek tertunda memasuki keadaan diselesaikan, sebarang doneCallbacks yang ditambahkan akan dilaksanakan serta-merta dengan parameter dihantar ke .resolve().
  • Syntax

deferred.resolveWith( context [, args ] )

jQuery1.5 menambah fungsi ini
参数 说明
context Object类型 传递上下文对象给完成回调函数(doneCallbacks)
args Array类型 传递一个可选的参数给完成回调函数(doneCallbacks)
Penerangan Parameter
Parameter Penerangan
konteks Jenis objek Hantar objek konteks kepada fungsi panggil balik penyiapan (doneCallbacks)
args Jenis tatasusunan Hantar parameter pilihan kepada fungsi panggil balik penyelesaian (doneCallbacks)

Nilai pulangan

deferred.resolveWith() mengembalikan Objek tertunda


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

fungsi deferred.state() digunakan untuk menentukan keadaan semasa objek Tertunda.

digunakan terutamanya untuk penyahpepijatan, contohnya, sebelum bersedia untuk menolak objek tertunda, tentukan sama ada objek itu sudah dalam keadaan diselesaikan.

注意:
Kaedah deferred.state() mengembalikan rentetan yang mewakili keadaan semasa objek Tertunda. Objek tertunda boleh berada dalam salah satu daripada tiga keadaan:

  • belum selesai”: Objek tertunda berada dalam keadaan belum selesai.
  • "diselesaikan" : Objek Tertunda berada dalam keadaan diselesaikan, yang bermaksud objek tertunda.resolve() atau
    deferred.resolveWith() telah dipanggil dan doneCallbacks telah dipanggil dipanggil (atau dalam proses dipanggil)
  • "ditolak" : Objek Tertunda berada dalam keadaan ditolak, yang bermaksud objek tertunda.reject() atau
    tertunda. rejectWith() telah dipanggil dan failCallbacks telah dipanggil (atau sedang dalam proses dipanggil).

Sintaks

  • deferred.state()

jQuery1.7 menambah fungsi ini

Nilai pulangan

deferred.state() mengembalikan Jenis rentetan


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

ditunda. fungsi pipe() Kaedah utiliti untuk menapis dan/atau merantai objek tertunda.

Nota: 从jQuery 1.8开始, deferred.pipe() 方法过时. Gunakan deferred.then() sebaliknya.

Setakat jQuery 1.8, kaedah deferred.pipe() adalah lapuk.then() harus digunakan. Kaedah

deferred.pipe() mengembalikan objek Promise baharu, 用于过滤状态或通过函数返回的延迟对象的值, yang dihantar kepada kaedah done() dan fail() yang sepadan dengan objek Promise
doneFilter dan failFilter fungsi Tapis status diselesaikan/ditolak dan nilai asal tertunda.
Bermula dari jQuery 1.7, kaedah ini juga menerima fungsi progressFilter untuk menapis sebarang pemberitahuan atau pemberitahuanDengan kaedah yang mengakses tertunda (tertunda).

Penapis ini boleh mengembalikan nilai baharu apabila fungsi panggil balik done() atau fail() bagi objek janji yang dikembalikan oleh pipe() dipanggil, atau mengembalikan objek lain yang boleh dilihat (Ditunda, Janji, dll.), objek yang boleh dilihat ini 传递 menyelesaikan/menolak 状态 sendiri dan 返回的值 dihantar ke fungsi panggil balik janji paip.

Jika null digunakan sebagai fungsi penapis, atau tiada fungsi penapis dinyatakan, nilai yang sama akan digunakan sebagai nilai asal apabila janji paip diselesaikan atau ditolak.

Sintaks

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

jQuery1.6 menambah fungsi ini dan sudah lapuk dalam 1.8

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

jQuery1.7 menambah fungsi ini dan sudah usang dalam 1.8

Penerangan Parameter

thead>failFilter
Parameter Penerangan
doneFilter
参数 说明
doneFilter Function类型 可选函数,当延迟得到解决时调用
failFilter Function类型 可选函数,当延迟被拒绝时调用
progressFilter Function类型 可选函数,当进度通知发送给Deferred(延迟)被调用
Jenis fungsi Fungsi pilihan, dipanggil apabila kelewatan diselesaikan
Jenis fungsi Fungsi pilihan, dipanggil apabila kelewatan ditolak
progressFilter Jenis fungsi Fungsi pilihan, dipanggil apabila pemberitahuan kemajuan dihantar ke Ditunda (kelewatan)

返回值

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移除

参数说明

参数 说明
doneFilter Function类型 可选 当Deferred(延迟)对象得到解决时被调用的一个函数
failFilter Function类型 可选 当Deferred(延迟)对象得到拒绝时被调用的一个函数
progressFilter Function类型 可选 当Deferred(延迟)对象生成进度通知时被调用的一个函数调用
doneCallbacks Function类型 当Deferred(延迟)对象得到解决时被调用的一个函数或函数数组
failCallbacks Function类型 当Deferred(延迟)对象得到拒绝时被调用的一个函数或函数数组
progressCallbacks Function类型 当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 新增该函数

参数说明

参数 说明
failCallbacks Function类型 一个函数,当 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 新增该函数

参数说明

参数 说明
target Object类型 绑定 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前端视频

Atas ialah kandungan terperinci Apakah objek tertunda jquery. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn