日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ES6中異步對象Promise用法詳解

本文實例講述了ES6中異步對象Promise用法。分享給大家供大家參考,具體如下:

安化ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

回憶一下ES5中的怎么使用異步方法

// es5中的異步回調(diào)
  let ajax = function(callback){
   console.log('執(zhí)行')  // 執(zhí)行
   setTimeout(() => {
    callback&&callback.call();
   }, 1000)
  };
  ajax(function(){
   console.log('hello') // 1s后打印hello
  });

使用ES6的Promise的方法:

let ajax = function(){
   console.log('執(zhí)行2'); // 執(zhí)行2
   return new Promise((resolve,reject)=>{
    setTimeout(() => {
     resolve() // 執(zhí)行下一步操作, reject  // 中斷當(dāng)前的操作
    },5000)
   })
}
ajax().then(()=>{
   console.log('promise','timeout2')  // 5s后打印  promise timeout2
})

連續(xù)使用Promise對象:

let ajax = function(){
   console.log('執(zhí)行3');
   return new Promise((resolve,reject)=>{
    setTimeout(() => {
     resolve();
    },5000)
   })
}
ajax().then(function(){
   return new Promise(function(resolve,reject){
    setTimeout(() => {
     resolve()
    }, 2000)
   })
}).then(function(){
   console.log('timeouk3') // 7s后打印timeouk3
})

Promise捕獲錯誤的catch( )

// catch 捕獲錯誤
let ajax = function(num){
   console.log('執(zhí)行4');
   return new Promise(function(resolve,reject){
    if(num>=5){
     resolve();
    }else{
     throw new Error('傳入的數(shù)字比5小')
    }
   })
}
ajax(4).then(function(){
   console.log('log',4);
}).catch(function(err){
   console.log('catch',err); // catch Error: 傳入的數(shù)字比5小
})

Promise的兩種高級用法

1.Promise.all( )

function loadImg(src){
   return new Promise((resolve,reject)=>{
    let img = document.createElement('img');
    img.src = src;
    img.onload = function(){
     resolve(img);
    }
    img.onerror = function(err){
     reject(err);
    }
   })
}
// 對所有的圖片進(jìn)行遍歷
function showImgs(imgs){
   console.log(imgs);
   imgs.forEach(function(img){
    document.body.appendChild(img);
   })
}
// promise.all()的用法
Promise.all([
   loadImg('/upload/otherpic47/17461.jpg'),
   loadImg('/upload/otherpic47/17462.jpg'),
   loadImg('/upload/otherpic47/17463.jpg')
]).then(showImgs)
/**解析:
把多個promise實例當(dāng)做一個promise實例,當(dāng)所有的promise實例發(fā)生變化后
新的promise實例才會發(fā)生變化
*/

2.Promise.race( )

// Promise 先加載 有一個圖片加載完就先添加到頁面
  function loadImg(src){
   return new Promise((resolve,reject)=>{
    let img = document.createElement('img');
    img.src = src;
    img.onload = function(){
     resolve(img);
    }
    img.onerror = function(err){
     reject(err);
    }
   })
  }
  function showImgs(img){
   let p = document.createElement('p');
   p.appendChild(img);
   document.body.appendChild(p);
  }
  // promise.race()的用法 只要有一個網(wǎng)速好的加載完,其他的就不加載了
  Promise.race([
   loadImg('/upload/otherpic47/17461.jpg'),
   loadImg('/upload/otherpic47/17462.jpg'),
   loadImg('/upload/otherpic47/17463.jpg')
  ]).then(showImgs)
 }

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計有所幫助。


分享名稱:ES6中異步對象Promise用法詳解
文章來源:http://www.dlmjj.cn/article/ihsses.html