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