在函数draw()
中我用for循环中的if来判断里面是否有图片,再在if里面通过img.onload
获取图片的高度,将他加到总高度上面,之后for循环结束,我在将总高度赋值给一个创建的div,之后return
这个div。
本来我想的是在for循环之后写一个计时器来卡住函数的运行,当判断onload
执行完毕之后在执行之后创建赋值的程序,但是当我把后面创建div和赋值的程序放到计时器里面的时候,draw
的return
就会出错,之后我又将draw
写成了async 在img.onload
外面写了个await
promise
来将它包裹住,但是这样的话return
的是一个promise,而不是这个div
我在这里想问两个问题
1.如果我用计时器的话我如何让return返回的数据正确
2.如果我用的是async的方法的话,我又该如何return正确的数据呢
这个是我await的写法
if (answer_img.length === 1) {
answer_height -= this.subject_row_height
let img = new Image()
img.src = answer_img[0].src
await new Promise(resolve => {
img.onload = function () {
img_number--
img_height += img.height
answer_height += img.height
}
})
}
你在onload函数里调用函数就可以了。
建议给出更具体的函数内容。你给的这个if 看不出什么猫腻的。
计时器与onload事件一样也是异步执行的无法用来卡住函数的运行,
用await promise 的话你调用 draw函数时也必须要在 async function异步函数中用 var div = await draw(); 才能获取返回的div元素。
async function xxxxxx(){
var div = await draw();
}
或者在promise的 then回调函数中获取
draw().then(div=>{
console.log(div);
});