首页 > 编程 > JavaScript > 正文

ES6中异步对象Promise用法详解

2019-11-19 11:06:08
字体:
来源:转载
供稿:网友

本文实例讲述了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('http://yanshi.sucaihuo.com/modals/0/23/small.jpg'),   loadImg('http://yanshi.sucaihuo.com/modals/0/20/small.jpg'),   loadImg('http://yanshi.sucaihuo.com/modals/0/2/small.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('http://yanshi.sucaihuo.com/modals/0/23/small.jpg'),   loadImg('http://yanshi.sucaihuo.com/modals/0/20/small.jpg'),   loadImg('http://yanshi.sucaihuo.com/modals/0/2/small.jpg')  ]).then(showImgs) }

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具http://tools.VeVB.COm/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表