本文实例讲述了ES6中异步对象承诺用法。分享给大家供大家参考,具体如下:
<强>回忆一下ES5中的怎么使用异步方法强>
//es5中的异步回调 让ajax=函数(回调){ console.log(“执行”)//执行 setTimeout(()=比;{ callback&, callback.call (); }, 1000) }; ajax(函数(){ console.log('你好')//1 s后打印你好 }); >之前<强>使用ES6的承诺的方法:强>
让ajax=function () { console.log(“执行2》);//执行2 返回新的承诺((解决,拒绝)=祝辞{ setTimeout(()=比;{ 解决()//执行下一步操作,拒绝//中断当前的操作 },5000) }) } ajax()()=祝辞{ console.log(‘承诺’,‘timeout2)//5 s后打印timeout2承诺 }) >之前<>强连续使用承诺对象:强>
让ajax=function () { console.log(“执行3 '); 返回新的承诺((解决,拒绝)=祝辞{ setTimeout(()=比;{ 解决(); },5000) }) } ajax(),然后(函数(){ 返回新的承诺(函数(解决,拒绝){ setTimeout(()=比;{ 解决() },2000) }) })(函数(){ console.log (timeouk3)//7 s后打印timeouk3 }) >之前<强>承诺捕获错误的catch() 强>
//捉捕获错误 让ajax=函数(num) { console.log(“执行4 '); 返回新的承诺(函数(解决,拒绝){ 如果(num>=5) { 解决(); 其他}{ 把新的错误(“传入的数字比5小) } }) } ajax(4),然后(函数(){ console.log(‘日志’,4); }).catch(函数(err) { console.log(“捕捉”,错);//捕获错误:传入的数字比5小 }) >之前<强>承诺的两种高级用法强>
函数loadImg (src) { 返回新的承诺((解决,拒绝)=祝辞{ 让img=document.createElement (img); img。src=https://www.yisu.com/zixun/src; img。onload=function () { 解决(img); } img。onerror=function (err) { 拒绝(错); } }) }//对所有的图片进行遍历 函数showImgs(一){ console.log(一个); imgs.forEach(函数(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”) ])(showImgs)/* *解析: 把多个承诺实例当做一个承诺实例,当所有的承诺实例发生变化后 新的承诺实例才会发生变化 */>之前
//承诺先加载有一个图片加载完就先添加到页面 函数loadImg (src) { 返回新的承诺((解决,拒绝)=祝辞{ 让img=document.createElement (img); img。src=https://www.yisu.com/zixun/src; img。onload=function () { 解决(img); } img。onerror=function (err) { 拒绝(错); } }) } 函数showImgs (img) { 让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”) ])(showImgs) } >之前感兴趣的朋友可以使用:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript面向对象入门教程》、《JavaScript错误与调试技巧总结》,《JavaScript数据结构与算法技巧总结》,《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
ES6中异步对象承诺用法详解