個人理解的promise

回調函數真正的問題在於他剝奪了我們使用 return 和 throw 這些關鍵字的能力。而 Promise 很好地解決了這一切。

所謂 Promise,就是一個對象,用來傳遞異步操作的消息。它代表了某個未來纔會知道結果的事件(通常是一個異步操作),並且這個事件提供統一的 API,可供進一步處理。

他有三個狀態,Pending(進行中)、Resolved(已完成)和 Rejected(已失敗)。Promise 對象的狀態改變,只有兩種可能:從 Pending 變爲 Resolved 和從 Pending 變爲 Rejected。

  1. 它可以避免層層回調函數的繁瑣,每次都是返回一個promise對象,可採用和jq一樣的鏈式調用;
  2. 出錯由catch error處理;
  3. 操作內部也可以通過rejected和resolved;
  4. then方法裏返回promise,執行結果作爲下一個then參數。

Promise 構造函數接受一個函數作爲參數,該函數的兩個參數分別是 resolve 方法和 reject 方法。

如果異步操作成功,則用 resolve 方法將 Promise 對象的狀態,從「未完成」變爲「成功」(即從 pending 變爲 resolved);

如果異步操作失敗,則用 reject 方法將 Promise 對象的狀態,從「未完成」變爲「失敗」(即從 pending 變爲 rejected)。

層層嵌套回調函數:

a(function(v1){
    b(v1,function(v2){
        c(v2,function(v3){
        //等等。。
    })  
   }
}

promise:代碼就會優雅不少。

a().then(b).then(c).catch(function(e){...})

主要參考:1. http://www.jianshu.com/p/063f7e490e9a
2. 阮一峯的ES6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章