JavaScript的執(zhí)行流程是分為"同步"與"異步"
圣誕主題在技術(shù)上用了大量的異步機制,比如css3的transition、animation、定時器以及事件等等。異步會帶來一個很大的問題:大量的“嵌套回調(diào)”
setTimeout(function(){ //任務(wù)一 setTimeout(function(){ //任務(wù)二 },1000) },1000)
上面最簡單的定時器異步代碼,任務(wù)二的執(zhí)行,必須等待任務(wù)一完成。其中最明顯的問題就是如果一直異步調(diào)用,代碼嵌套非常嚴重。這個代碼本身是沒錯的,邏輯也是正常的,但是從維護的角度來說,同步的代碼更符合人的線性邏輯思維
為了改成異步編程的流程問題, jQuery 也引入了 Promise 的概念。 Promise 是一種令代碼異步行為更加優(yōu)雅的抽象,有了它,我們就可以像寫同步代碼一樣去寫異步代碼。這個東東看起來很復雜,實際上我們只要抓住核心的使用就可以
觀察右邊代碼:
通過$.Deferred處理過的代碼,很明顯沒有了回調(diào)的嵌套,雖然代碼量看起來多了點,但是實際上,每一個代碼執(zhí)行部分都被封裝了起來,只留了Deferred的接口處理了,等于是我們把執(zhí)行的流程控制交給了Deferred,這樣的好處就是我們在寫嵌套函數(shù)的時候,可以用deferred提供的管道風格編寫同步代碼了
dtd.then(function() { //操作1 }).then(function() { //操作2 }).then(function() { //操作3 })
這里要了解3個步驟
var dtd = $.Deferred(); //創(chuàng)建
dtd.resolve(); //成功
dtd.then() //執(zhí)行回調(diào)
具體的我們可以參考下jQuery的Deferred部分的API說明,點擊此處
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報