我代码是一个函数,里面有个for循环,完了在一个if判断是否有图片,之后在if里获取图片的高,之后把图片的高度加到总高度上,因为用到了onload,所以写了个async语句把if里的东西包裹了起来,但是我在async外面调用总高度依旧是没有添加图片高度
async function getImgHeight() {
const img = new Image()
img.src = answer_img[0].src
await new Promise(resolve => {
img.onload = async function () {
img_number--
img_height += img.height
answer_height += img.height
}
})
}
getImgHeight()
console.log(answer_height,img_height)
我这个console出来的总高度为没有添加图片高度,图片高度img—height
为在for循环外面初始化的0,想问问这个该如何解决呢
这样做是因为 JS 不允许穿越时空,加载图片这事就像煮鸡蛋,你不能一下锅就捞出来,所以你得
await
。并且
await
是一个全新的功能,在没有这种功能之前,你只能把鸡蛋下锅的同时,在上面贴一个便利贴,提醒之后的自己,要拿熟鸡蛋干什么。注意
await
之咒只在async
函数体和全局async
环境下使用,且只能冻结其所在的函数体,对这个函数体外的时空而言,冻结的时空是一个遥遥无期的承诺,终其一生也看不到承诺兑现之日——除非把外面的时空也冻结了。