国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

jQuery中的Deferred和promise 的區別

rickchen / 2872人閱讀

摘要:使用的好處有以下幾點你可以多次調用和函數,并使用不同的回調函數。或許你的一個回調函數用來停止動畫,一個用來發起一個新的請求,一個用來將接受到的數據展示給用戶。即使在調用完成之后,你依然可以調用和函數,并且回調函數可以立即執行。

Deferred和Promise之間有什么區別呢?

promise

一個promise就是一個由異步函數返回的對象。當你想要自己編寫一個這樣的函數時你需要使用一個deferred。

var promise = $.ajax({
    url: "/myServerScript"
});

promise.done(mySuccessFunction); 
promise.fail(myErrorFunction); 


var promise = $.ajax({
    url: "/myServerScript"
});  

promise.then(mySuccessFunction,myErrorFunction);  

使用Promises的好處有以下幾點:

你可以多次調用done()和fail()函數,并使用不同的回調函數。或許你的一個回調函數用來停止動畫,一個用來發起一個新的AJAX請求,一個用來將接受到的數據展示給用戶。

var promise = $.ajax({ url: "/myServerScript" });

promise.done(myStopAnimationFunction); promise.done(myOtherAjaxFunction); 
promise.done(myShowInfoFunction); promise.fail(myErrorFunction);

即使在AJAX調用完成之后,你依然可以調用done()和fail()函數,并且回調函數可以立即執行。不同的狀態之間并不會發生變量混亂。當一個AJAX調用結束時,它保持了一個成功狀態或者失敗狀態,這個狀態不會發生改變。

你可以合并promises。有時你需要同時進行兩個AJAX請求并且想要在兩個AJAX請求都成功時調用一個函數。為了完成這個任務,你需要使用一個新的$.when()函數:

var promise1 = $.ajax("/myServerScript1"); 
var promise2 =  $.ajax("/myServerScript2");

$.when(promise1, promise2).done(function(xhrObject1, xhrObject2) { // 處理兩個XHR對象 });
deferred

簡單說,deferred對象就是jQuery的回調函數解決方案。 在英語中,defer的意思是"延遲",所以deferred對象的含義就是"延遲"到未來某個點再執行。

一個deferred對象能做的和一個promise對象差不多,但是它有兩個函數來觸發done()和fail()函數

一個deferred對象擁有一個resolve()函數來處理一個成功的結果并執行與done()相關的函數。reject()函數則用來處理失敗的結果并執行與fail()相關的函數。

你可以給resolve()和reject()函數都提供參數,然后它們都將傳遞給與done()和fail()相關的回調函數。

總結

jQuery 的ajax 就是返回一個promise 對象,里面含有done(), fail()方法; deferred 就是實現返回這個promise 對象的過程。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79083.html

相關文章

  • 一篇文章帶你嘗試拿下js異步

    摘要:單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。這決定了它只能是單線程,否則會帶來很復雜的同步問題。小結本身是單線程的,并沒有異步的特性。當異步函數執行時,回調函數會被壓入這個隊列。 走在前端的大道上 本篇將自己讀過的相關 js異步 的文章中,對自己有啟發的章節片段總結在這(會對原文進行刪改),會不斷豐富提煉總結更新。 概念 JS 是單線程的語言。 單線程就意味著...

    MartinDai 評論0 收藏0
  • javascript異步編程詳解

    摘要:在服務器端,異步模式甚至是唯一的模式,因為執行環境是單線程的,如果允許同步執行所有請求,服務器性能會急劇下降,很快就會失去響應。第三是,捕捉不到他的錯誤異步編程方法回調函數這是異步編程最基本的方法。 前言 你可能知道,Javascript語言的執行環境是單線程(single thread)。所謂單線程,就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行后面...

    huangjinnan 評論0 收藏0
  • jQuery Deferred

    摘要:比較下和也就是說返回值是的一個非狀態操作的子集,允許我們添加回調,但是不允許我們操作的狀態。前面說了的返回值是一個新的對象,如果在新的對象上繼續添加回調會怎么樣呢我們分兩種情況來看。方法的返回值不是對象的返回值會傳遞給的參數。 前言 Deferred是從1.5版本引入的一個核心特性之一,主要是為了解決Callback Hell,老生常談的問題,這里就不多贅述了。本文旨在剖析Deferr...

    HollisChuang 評論0 收藏0
  • jQuery源碼解析Deferred異步對象

    摘要:回調隊列對象,用于構建易于操作的回調函數集合,在操作完成后進行執行。對象對象,用于管理回調函數的多用途列表。如果傳入一個延遲對象,則返回該對象的對象,可以繼續綁定其余回調,在執行結束狀態之后也同時調用其回調函數。 在工作中我們可能會把jQuery選擇做自己項目的基礎庫,因為其提供了簡便的DOM選擇器以及封裝了很多實用的方法,比如$.ajax(),它使得我們不用操作xhr和xdr對象,直...

    Coding01 評論0 收藏0
  • jQuery Deferred對象

    摘要:給普通的操作指定回調函數對象的最大優點,就是它把這一套回調函數接口,從操作擴展到了所有操作。方法用于指定對象狀態為已失敗時的回調函數。執行完畢執行成功執行失敗接收一個或多個對象作為參數,為其指定回調函數。 什么是deferred對象 開發網站的過程中,我們經常遇到某些耗時很長的javascript操作。其中,既有異步的操作(比如ajax讀取服務器數據),也有同步的操作(比如遍歷一個大型...

    baoxl 評論0 收藏0

發表評論

0條評論

rickchen

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<