初探 es6 promise

javascript是單線程程序,全部代碼都是單線程執行。致使javascript的網絡請求都是異步執行,異步執行能夠經過回調函數實現:
setTimeout(callback,1000);
function callback(){
    console.log('----callback')     
    //1秒鐘才能打印,回調函數處理異步執行的
};
可是es6推出一種新的方法new Promise()==>對象用於表示一個異步操做的最終狀態(完成或失敗),以及其返回的值。
new Promise( function(resolve, reject) {...});resolve 表示成功的狀態 reject 表示失敗的狀態
Promise的方法有:
1.Promise.all([]).then(e=>e).catch(e=>e) ==>數組中全部傳入狀態完成才執行
2.Promise.race([]).then(e=>e).catch(e=>e) ==>數組中又一個傳入的狀態完成就執行
3.Promise.resolve({}) ==>返回一個成功的狀態
4.Promise.reject({}) ==>返回一個失敗的狀態
let a=new Promise((resolve,reject)=>{
    resolve(1)
    //或reject()
});
a.then(e=>{   // resolve 返回的結果
    console.log(e)  //1
}).catch(e=>{ //reject 返回的結果
    console.log(e)
});
若是咱們有一個需求是須要全部3個接口的數據都返回了而後再進行操做,那麼promise.all就能夠解決,好比下面例子:
let b1=new Promise((resolve,reject)=>{
    resolve('b1')
});
let b2=new Promise((resolve,reject)=>{
    resolve('b2')
})
let b3=new Promise((resolve,reject)=>{
    resolve('b3')
});
let b4=Promise.resolve('成功')  //調用一個成功的狀態
Promise.all([b1,b2,b3,b4]).then(value=>{
    console.log(value)   //  'b1', 'b2', 'b3' ]
})
let b5=Promise.reject('失敗')  //調用一個失敗的狀態
Promise.all([b1,b5]).then(value=>{
    console.log(value)   
}).catch(e=>{
    console.log(e,'------失敗')  //失敗
})
若是咱們有一個需求是3個接口中只要有一個完成了接口請求即執行,Promise.race([])
var promise1 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 50, 'one');
});
var promise2 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(value=>{    
  console.log(value);  //one  
}).catch(e=>{
    console.log(e)
})
//promise1或者promise2誰先執行完就執行就獲取先執行的值

天天進步一點,但願你們喜歡,也但願喜歡的朋友點個贊或收藏,後續繼續更新...javascript

相關文章
相關標籤/搜索