//闭包隐藏数据,只提供API,做一个缓存小插件
function createCache(){
const data={} //闭包中的数据,被隐藏,不被外界访问
return {
set:function(key,val){
data[key]=val
},
get:function(key){
return data[key]
}
}
}
const c=createCache()
c.set('a',100)
c.get('a')
//100
function loadImg(src){
const p=new Promise((resolve,reject)=>{
const img=document.createElement('img')
img.onload=()=>{
resolve(img)
}
img.onerror=()=>{
const err=new Error(`图片加载失败 ${src}`)
reject(err)
}
img.src=src
})
return p
}
const url1='http://img1'
const url2='http://img2'
loadImg(url1).then(img1=>{
console.log(img1.width)
return img1 //普通对象
}).then(img1=>{
console.log(img1.height)
return loadImg(url2) //promise 实例
}).then(img2=>{
console.log(img2.width)
return img2
}).then(img2=>{
console.log(img2.height)
}).catch(ex=>console.log(ex))