中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

东莞市| 桃江县| 桑植县| 五大连池市| 虞城县| 嘉禾县| 姜堰市| 准格尔旗| 措美县| 修武县| 通化市| 麻栗坡县| 蒲城县| 湘潭市| 兰州市| 同德县| 安溪县| 丘北县| 东台市| 汝城县| 通海县| 永寿县| 迁安市| 阜宁县| 修水县| 休宁县| 博兴县| 平邑县| 莆田市| 井冈山市| 葫芦岛市| 仙居县| 栾城县| 资阳市| 天门市| 崇礼县| 南丹县| 调兵山市| 仪陇县| 嘉定区| 高陵县|