亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6中異步對象Promise用法詳解

發布時間:2020-10-09 23:48:30 來源:腳本之家 閱讀:156 作者:xiaxiaoxian 欄目:web開發

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

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

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

使用ES6的Promise的方法:

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

連續使用Promise對象:

let ajax = function(){
   console.log('執行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('執行4');
   return new Promise(function(resolve,reject){
    if(num>=5){
     resolve();
    }else{
     throw new Error('傳入的數字比5小')
    }
   })
}
ajax(4).then(function(){
   console.log('log',4);
}).catch(function(err){
   console.log('catch',err); // catch Error: 傳入的數字比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);
    }
   })
}
// 對所有的圖片進行遍歷
function showImgs(imgs){
   console.log(imgs);
   imgs.forEach(function(img){
    document.body.appendChild(img);
   })
}
// promise.all()的用法
Promise.all([
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17461.jpg'),
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17462.jpg'),
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17463.jpg')
]).then(showImgs)
/**解析:
把多個promise實例當做一個promise實例,當所有的promise實例發生變化后
新的promise實例才會發生變化
*/

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()的用法 只要有一個網速好的加載完,其他的就不加載了
  Promise.race([
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17461.jpg'),
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17462.jpg'),
   loadImg('https://cache.yisu.com/upload/information/20200622/114/17463.jpg')
  ]).then(showImgs)
 }

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

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马龙县| 南平市| 乾安县| 洪江市| 叶城县| 平塘县| 东丽区| 苏尼特左旗| 嘉义市| 贵南县| 惠东县| 安溪县| 新和县| 固镇县| 武安市| 寻乌县| 临泽县| 白山市| 淮滨县| 玉门市| 大石桥市| 阆中市| 承德县| 资溪县| 桐柏县| 彭山县| 宣威市| 广元市| 武穴市| 章丘市| 临沂市| 汝州市| 渝北区| 长乐市| 阜新| 县级市| 潜江市| 海宁市| 个旧市| 奉新县| 宣化县|