NodeJS基礎2---2 Promise詳解

1、ES6的Promise語言標準、Promise/A+規範

一、Promise是Js針對異步場景的解決方案。

Promise是一個對象,同時是一種規範,針對異步操做約定統一接口,表示一個異步操做的最終結果,以同步方式寫代碼,執行的操做是異步的,保證程序的執行順序是同步的。javascript

二、Promise對象的三種狀態

  1. 未完成(pending)
  2. 已完成(fulfilled)
  3.    失敗(rejected)

三種狀態變化只能由  未完成----失敗  或  未完成----已完成java

三、Promise/A+規範

PromiseA與A+不一樣點es6

  1. A+規範經過術語thenable 來去區分promise對象,當一個對象擁有 then()函數時,這對象就被認爲是一個promise
  2. A+定義onFulfilled/onRejected必須做爲函數來調用,並且調用過程必須是異步的,成功、失敗返回promise的處理過程,必須做爲函數來調用,而且處理過程是異步的。
  3. A+嚴格定義then方法鏈式調用時onFulfilled(成功)/onRejeced(失敗)的調用順序。

 

2、如何使用

經過promise對象的 then()方法把流程裏面依次執行的異步操做,也就是回調函數,如今直接傳遞給Promise對象的then()方法。promise

Promise then方法

  1. then方法返回一個promise對象
  2. then方法接受兩個·參數,成功時的回調函數,失敗時的回調函數。
  3. 成功時的回調函數,參數爲上一個promise的值
  4. 失敗回調函數參數爲失敗緣由
promiseObj.then( onFulfilled , onRejected)

onFulfilled = function(value){

    return promiseObj2

}

onRejected = function(err){}

執行原理:

Promise會保證 then方法執行的順序,第一個Promise完成時,後面鏈式調動的then方法,參數裏的回調函數會依次調用,同時這些回調函數不是在執行 then()方法時馬上執行,而是必須等待前面Promise完成後才能執行。異步

Promise特色

回調函數能夠寫成規範的鏈式寫法,程序流程很清楚,一整套流程能夠實現爲多個異步操做,部署一個回調函數,或爲多個回調函數中拋出的錯誤,統一指定一個方法。函數

promiseAnimate(ball1,100)
	.then(function(){
		return promiseAnimate(ball2 ,200)
	})
	.then(function(){
		return promiseAnimate(ball3 ,300)
	})
	.then(function(){
		return promiseAnimate(ball3 ,150)
	})
	.then(function(){
		return promiseAnimate(ball2 ,150)
	})
	.then(function(){
		return PromiseAnimate(ball1 ,150)
	})

 

Promise庫

  • bluebird
  • Q
  • then.js
  • es6-promise
  • ypromise
  • saync
  • native-promise-only
     

bluebird既兼容Promise類庫,又擴展了取消promise對象的運行,取的Promise的運行進度,以及錯誤處理的擴展監測。spa

相關文章
相關標籤/搜索