ES6之Promise对象
2017-10-11 16:56
323 查看
异步
即:先A后B传统方法:1.回调 2.事件触发
传统方法
let ajax = function(callback){ setTimeout(function() { callback&&callback.call(); }, 500); } ajax(function(){ console.log('hello') })
同样的案例用promise怎么写呢?
let ajax = function(){ console.log('执行2'); // 返回一个对象,这个对象就是一个promise实例 return new Promise(function(resolve,reject){ setTimeout(function(){ resolve(); },1000) }) } //ajax运行后返回一个promise实例,具有.then方法,表示执行下一步。then的函数体就是下一步 ajax().then(function(){ console.log('promise','timeout2'); })
Promise的作用
相比较而言,结果上一模一样。但是ES6具有更好的可读性、可维护性。
Promise的基本用法
Promise.all
把多个Promise实例当做一个promise实例。含义:all下面是个数组,数组传递进来多个promise实例。当三张图片所有的状态都发生变化时,才会触发promise.all这个新的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(imgs){ imgs.forEach(function(img){ document.body.appendChild(img); }) } Promise.all([ loadImg('http://i4.buimg.com/567571/df1ef0720bea6832.png'), loadImg('http://i4.buimg.com/567571/2b07ee25b08930ba.png'), loadImg('http://i2.muimg.com/567571/5eb8190d6b2a1c9c.png') ]).then(showImgs)
执行结果:
如果有一个图片正在加载中,这三个图片就都不会显示!
Promise.race
有一个实例的状态改变,就触发promise.race新对象,其他实例不再执行// 有一个图片加载完就添加到页面 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([ loadImg('http://i4.buimg.com/567571/df1ef0720bea6832.png'), loadImg('http://i4.buimg.com/567571/2b07ee25b08930ba.png'), loadImg('http://i2.muimg.com/567571/5eb8190d6b2a1c9c.png') ]).then(showImgs)
相关文章推荐
- ES6 Promise对象概念与用法分析
- ES6 Promise对象概念及用法介绍
- ES6 Promise对象的学习笔记
- ES6 Promise 对象
- ES6 - Promise对象,异步操作
- 谈谈 ES6 的 Promise 对象
- es6 javascript的Promise对象(上)
- ES6中的promise对象
- 谈谈 ES6 的 Promise 对象
- ES6学习13章:Promise对象
- ES6笔记(二)Promise对象
- ES6的Promise对象
- ES6 Promise对象
- ES6 Promise 对象扯谈
- ES6 Promise对象
- bluebird.js - 让所有浏览器都支持 ES6 Promise 对象
- ES6中的Promise对象小结
- ES6中promise对象——告别回调的嵌套
- ES6深入学习记录(二)promise对象相关
- ES6中的异步对象Promise