最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

ES6中异步对象Promise用法详解

来源:动视网 责编:小采 时间:2020-11-27 21:53:03
文档

ES6中异步对象Promise用法详解

ES6中异步对象Promise用法详解:本文实例讲述了ES6中异步对象Promise用法。分享给大家供大家参考,具体如下: 回忆一下ES5中的怎么使用异步方法 // es5中的异步回调 let ajax = function(callback){ console.log('执行') // 执行 setTimeout(() => { ca
推荐度:
导读ES6中异步对象Promise用法详解:本文实例讲述了ES6中异步对象Promise用法。分享给大家供大家参考,具体如下: 回忆一下ES5中的怎么使用异步方法 // es5中的异步回调 let ajax = function(callback){ console.log('执行') // 执行 setTimeout(() => { ca


本文实例讲述了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.jb51.net/code/HtmlJsRun测试上述代码运行效果。

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

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

文档

ES6中异步对象Promise用法详解

ES6中异步对象Promise用法详解:本文实例讲述了ES6中异步对象Promise用法。分享给大家供大家参考,具体如下: 回忆一下ES5中的怎么使用异步方法 // es5中的异步回调 let ajax = function(callback){ console.log('执行') // 执行 setTimeout(() => { ca
推荐度:
标签: 使用 用法 讲解
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top