在飽嘗了利用函數執行棧書寫異步代碼的痛苦後,人們創造出了Promise對象,異步
做爲在ES6中被統一規範的對象,它用來在函數中將函數邏輯與結果處理分隔開來,函數
該對象提供了兩個參數,resolve以及reject。這兩個參數都是函數,下面是使用spa
Promise對象的簡單代碼示例:code
1 var fn=function(num){ 2 return new Promise(function(resolve,reject){ 3 if(typeof num=='number'){ 4 resolve(); 5 }else{ 6 reject(); 7 } 8 }); 9 } 10 11 fn(2).then(function(){ 12 console.log('輸入了一個數字!'); 13 }).catch(function(){ 14 console.log('輸入的不是一個數字!'); 15 });
上面是一個簡單邏輯判斷輸入函數fn的參數是否爲數字的代碼,其中函數體fn執行返回一個Promise對象,對象
若是結果達到預期,執行resolve(),反之執行reject()。在函數執行時,resolve對應then,reject對應catch,blog
根據這種一一對應關係,咱們能夠輕易對函數結果進行操做。值得一提是,then函數含有兩個參數,第一io
個對應resolve,而第二個對應reject。因此實際上catch(()=>{})等價於then(null,()=>{}).console
另外,Promise的應用場景很是普遍,好比咱們使用的不一樣AJAX請求中的有依賴的數據傳遞等。function