【发布时间】:2019-08-20 13:20:21
【问题描述】:
我正在实现一个简单的验证函数,它应该返回 true/false 取决于图像大小。
内部img.onload 函数需要一些时间来执行,所以父checkImagesWidth 应该等待它完成。
代码如下:
checkImagesWidth: function (file, restrictions) {
var img = new Image()
img.src = window.URL.createObjectURL(file)
img.onload = () => {
window.URL.revokeObjectURL(img.src)
return (img.naturalWidth >= restrictions.width) || (img.naturalHeight >= restrictions.height)
}
}
换句话说,这个想法是在checkImagesWidth() 之后获取true/false,并在if 语句中使用这个值,就像一个普通的true/false 值一样。
我试图通过回调、承诺、异步/等待来实现这种方法,但没有成功。 这甚至可能吗?
【问题讨论】:
-
试试:
return img.onload = () => ...或者你可以在函数内部添加一个T/F值赋值给一个变量,并在img.onload执行后返回 -
@MaxSvid 根本不起作用。
-
@MaxSvid 它不起作用。 ad 是仅在加载图像时才会执行的事件,因此 checkImagesWidth 将在 onload 执行之前执行并退出。
-
@MaxSvid 我也在尝试这个。它只是返回一个函数的 (img.onload) 代码。
-
这样您就可以将函数转换为异步并使用async/await语法或修改函数abit:
let y = null; img.onload = () => { window.URL.revokeObjectURL(img.src) y = (img.naturalWidth >= restrictions.width) || (img.naturalHeight >= restrictions.height) } return y
标签: javascript algorithm