ES6 promise

Promise編程

基本概念:
Promise:是ES6中新增的異步編程解決方案,體如今代碼中它是一個對象,能夠經過Promise 構造函數來實例化。數組

new Promise(cb)
三種狀態:Pending、 Resolved、Rejectedapp

兩個原型方法:
Promise.prototype.then()
Promise.prototype.catch()異步

兩個經常使用的靜態方法:
Promise.all() // 能夠將多個Promise實例包裝成一個新的Promise實例異步編程

  • 當全部Promise實例的狀態都變成resolved,Promise.all的狀態纔會變成resolved,此時返回值組成一個數組,傳遞給then中的resolve函數。
  • 只要期中有一個被rejected,Promise.all的狀態就變成rejected,此時第一個被rejected的實例的返回值,會傳遞給p的回調函數。

Promise.resolve()函數

Pending ====> Resolved(已完成)
Pending ====> Rejected(已失敗)this

console.log(1)
const p = new Promise(function(resolve, reject){
    const img = new Image();
    img.src = '';
    img.onload = function(){
        resolve(this);
    }
    img.onerror = function(){
        reject(new Error('圖片加載失敗'));
    }
})

p.then(function(img){
   document.body.appendChild(img);
}, function(err){
    console.log(err)
}) //第一個參數是執行成功的,第二個函數是執行失敗(通常不推薦第二個參數,採用catch)
console.log(2)
p.catch(function(err){
   console.log(err)
})
 // 1 2 error(異步,不影響後面加載)
 
 
var imgs = ['a.jpg', 'b.jpg', 'c.jpg']
function loadImg(url){
    const p = new Promise(function(resolve, reject){
        const img = new Image();
        img.src = '';
        img.onload = function(){
            resolve(this);
        }
        img.onerror = function(){
            reject(new Error('圖片加載失敗'));
        }
    })
    return p;
}

const allDone = Promise.all([loadImg(imgs[0])], [loadImg(imgs[1])], [loadImg(imgs[2])]);

allDone.then(function(data){
   console.log(data) // data 就是一組數組
}).catch(function(err){
   console.log(err) //
})

Promise.resolve()三種用法
//參數是Promise實例,將不作任何修改、原封不動的返回這個實例url

Promise.resolve(loadImg(imgs[0]).then(function(data){
  console.log(data) // 
})

//將對象轉爲Promise對象,而後就當即執行thenable對象的then方法prototype

Promise.resolve({
   then(resolve, reject){
       const img = new Image();
       img.src = imgs[0];
       img.onload = function (){
           resolve(this)
       }
   }
 }).then(function(data){
     
 })

//參數是一個基本數據類型或者不傳參數 ,那麼返回一個狀態爲resolved的Promise對象code

Promise.resolve('abc').then(function(str){
   console.log(str); //abc
  })
  
  const p = Promise.resolve();
  console.log(p)
相關文章
相關標籤/搜索