13 Avoiding the callback hell with Deferred

This chapter covers

  • What promises are and why they're important
  • The Deferred object
  • How to manage multiple asynchronous operations
  • Resolving and rejecting a promise

13.1 Introduction to promises

13.2 The Deferred and Promise objects

13.3 The Deferred methods


$.Deferred([beforeStart])
Parameters
beforeStart (Function)
Returns
The Deferred Object.


13.3.1 Resolving or rejecting a Deferred


deferred.resolve([argument, ..., argument])
Parameters
argument (Any)
Returns
The Deferred object.


deferred.resolveWith(context[, argument, ..., argument])
Parameters
context (Object)
argument (Any)
Returns
The Deferred object.


deferred.reject([argument, ..., argument])
Parameters
argument (Any)
Returns
The Deferred object.


deferred.rejectWith(context[, argument, ..., argument])
Parameters
context (Object)
argument (Any)
Returns
The Deferred object.


13.3.2 Execute functions upon resolution or rejection


deferred.done(callbacks[, callbacks, ..., callbacks])
Parameters
callbacks (Function|Array)
Returns
The Deferred object.


deferred.fail(callbacks[, callbacks, ..., callbacks])
Parameters
callbacks (Function|Array)
Returns
The Deferred object.


13.3.3 The when() method


$.when(object[, object, ..., object])
Parameters
object (Deferred|Promise|Object)
Returns
A Promise object

function success() {}
function fail() {}
$.when($.ajax('integer.php'), $.ajax('integer.php')).done(success).fail(fail);

13.3.4 Notifying about the progress of a Deferred


deferred.notify([argument, ..., argument])
Parameters
argument (Any)
Returns
The Deferred object.


deferred.notifyWith(context[, argument, ..., argument])
Parameters
context (Object)
argument (Any)
Returns
The Deferred Object.


13.3.5 Follow the progress


*** deferred.progress(callbacks[, callbacks, ..., callbacks])***
Parameters
callbacks (Function|Array)
Returns
The Deferred object.

var deferred = $.Deferred().progress(function (value) {
  $('.progress').text(Math.floor(value) + '%');
});

13.3.6 Using the Promise object


deferred.promise([target])
Parameters
target (Object)
Returns
The Promise object.

function timeout(milliseconds) {
  var deferred = $.Deferred();
  setTimeout(deferred.resolve, milliseconds);
  return deferred.promise();
}
timeout(1000).done(function() {
  alert('I waited for 1 second!');
});

13.3.7 Take it short with then()


deferred.then(resolvedCallback[. rejectedCallback[, progressCallback]])
Parameters
resolvedCallback (Function)
rejectedCallback (Function)
progressCallback (Function)
Returns
A Promise object

animate(1000).then(
 function() {
 alert('The process is completed');
 },
 null,
 function (value) {
 $('.progress').text(Math.floor(value) + '%');
 }
);

13.3.8 Always execute a handler


deferred.always(callbacks[, callbacks, ..., callbacks])
Parameters
callbacks (Function|Array)
Returns
The Deferred object.

var deferred = $.Deferred();
deferred
 .then(
 function(value) {
 console.log('success: ' + value);
 },
 function(value) {
 console.log('fail: ' + value);
 }
 )
 .always(function() {
 console.log('I am always logged');
 });
deferred.reject('An error');

13.3.9 Determine the state of a Deferred


deferred.state()
Returns
A string representing the state of the Deferred.

assert.equal(deferred.state(), 'resolved');

13.4 Promisifying all the things


promise([type][, target])
Parameters
type (String)
target (Object)
Returns
A Promise object.

$('#square1').animate({left: 500}, 1500);
 $('#square2').animate({left: 500}, 3000);
 $('.square')
 .promise()
 .done(function() {
 alert('The animations are completed');
 });

13.5 Summary


deferred.resolve()
deferred.reject()
deferred.notify()
deferred.resolveWith()
deferred.rejectWith()
deferred.notifyWith()
deferred.done()
deferred.fail()
deferred.progress()
deferred.always()
deferred.state()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纱扭,一起剝皮案震驚了整個濱河市鲸阔,隨后出現(xiàn)的幾起案子胰蝠,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件删豺,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機心软,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來著蛙,“玉大人删铃,你說我怎么就攤上這事√けぃ” “怎么了猎唁?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長顷蟆。 經(jīng)常有香客問我诫隅,道長,這世上最難降的妖魔是什么帐偎? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任逐纬,我火速辦了婚禮,結(jié)果婚禮上削樊,老公的妹妹穿的比我還像新娘豁生。我一直安慰自己,他們只是感情好漫贞,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布甸箱。 她就那樣靜靜地躺著,像睡著了一般迅脐。 火紅的嫁衣襯著肌膚如雪芍殖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天谴蔑,我揣著相機與錄音豌骏,去河邊找鬼。 笑死树碱,一個胖子當著我的面吹牛肯适,可吹牛的內(nèi)容都是我干的变秦。 我是一名探鬼主播成榜,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹦玫!你這毒婦竟也來了赎婚?” 一聲冷哼從身側(cè)響起刘绣,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挣输,沒想到半個月后纬凤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡撩嚼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年停士,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片完丽。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡恋技,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逻族,到底是詐尸還是另有隱情蜻底,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布聘鳞,位于F島的核電站薄辅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抠璃。R本人自食惡果不足惜站楚,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搏嗡。 院中可真熱鬧源请,春花似錦、人聲如沸彻况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纽甘。三九已至良蛮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悍赢,已是汗流浹背决瞳。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留左权,地道東北人皮胡。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像赏迟,于是被迫代替她去往敵國和親屡贺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容