Promise是ES6中新增的异步编程解决方案,体现在代码中它是一个对象,可以通过 Promise 构造函数来实例化。
其最基本的使用 new Promise(function(resolve,reject){}) 传两个参数resolve和reject 然后再逻辑里返回resolve和reject 它有两个原型方法
Promise.prototype.then()
Promise.prototype.catch()
两个常用的静态方法
Promise.all()
Promise.resolve()
//一:原型方法
const imgs = [
'http://wap.cmread.com/tingmedia/lingxi/image/head/default_head_logo.png',
'http://wap.cmread.com/tingmedia//image/1/55/72.jpg',
'http://wap.cmread.com/tingmedia//image/1/55/72.jpg'
];
var p=new Promise(function(resolve,reject){
var img=new Image();
img.src='http://wap.cmread.com/tingmedia//image/1/55/72.jpg';
img.onload=function () {
resolve(this);
}
img.onerror=function(){
reject('加载失败')
}
})
p.then(function (res) {
console.log('加载成功');
document.body.appendChild(res)
}).catch(function (error) {
console.log('加载失败'+error)
})
//封装异步处理对象
function loadImg(url) {
var promise=new Promise(function (resolve,reject) {
var img=new Image();
img.src=url;
img.onload=function () {
resolve(this)
};
img.onerror=function () {
reject('加载失败')
}
});
return promise
}
loadImg(imgs[0]).then(function (res) {
document.body.appendChild(res)
})
//二:静态方法
//Promise.all()能将多个promise对象包装成一个新的promise对象,
//当所有promise对象都返回resolve时候,Promise.all()才返回resolve,此时所有resolve组成一个数组,返回给then中的resolve
//如果有一个返回reject则返回reject,并且把这个rejec返回给Promise.all的reject
var allDone=Promise.all([loadImg(imgs[0]),loadImg(imgs[1]),loadImg(imgs[2])]) //P要大写
allDone.then(function (res) {
res.forEach(function (item,index) { //很多时候这个顺序不能错
document.write(index);
document.body.appendChild(item)
})
})
//Promise.resolve()
//如果参数是promise对象则原封不动的返回promise对象
Promise.resolve(loadImg(imgs[0])).then(function (res) {
console.log(111);
document.body.appendChild(res)
})
//如果参数是对象,则立即会把这个对象变成promise对象,然后执行then方法
Promise.resolve({
then(resolve,reject){
const img=new Image();
img.src=imgs[0];
img.onload=function () {
resolve(this)
}
}
}).then(function(res){
document.body.appendChild(res);
console.log(222)
})

最新文章

  1. Linux下定时任务配置-crontab
  2. 重学ps_1
  3. php处理图片实现
  4. Prism 5 + MEF中的ModuleCatalog.CreateFromXaml问题
  5. POJ 1185 经典状压dp
  6. 说说php取余运算(%)的那点事
  7. 【mongodb】 需求
  8. 简化PHP开发的10个工具
  9. IOS开发之Post 方式获取服务器数据
  10. git 以及 github 使用系列
  11. Vuex 学习总结
  12. 【Centos7】安装nginx
  13. MFC学习RepositionBars
  14. 详细介绍MySQL/MariaDB的锁
  15. python全栈开发day92-day96 Vue总结
  16. 如何使用Windows防火墙禁止软件联网
  17. 【HANA系列】SAP HANA XS的JavaScript API详解
  18. IDEA中不同项目配置不同JDK
  19. Python之路,第三篇:Python入门与基础3
  20. Alpha- 事后诸葛亮(麻瓜制造者)

热门文章

  1. java基础第十三篇之Collection
  2. 用Docker搭建LNMP
  3. 从0到1构建网易云信IM私有化
  4. Spring事务原理一探
  5. Python自学day-2
  6. git push 时:报missing Change-Id in commit message footer的错误
  7. Java学习笔记——设计模式之十.观察者模式
  8. 如何在VMware12中安装centos6.7系统
  9. Go语言学习——channel的死锁其实没那么复杂
  10. 简单的scrapy实例