Javascript 如何从此函数调用返回值?
我有一个函数来获取图像尺寸。我从createObjectURL发送返回 它可以很好地获取维度,但我无法获取值。我试图得到这两个值,但问题似乎是函数中有一个函数。外部函数不知道内部函数中设置的值。当我硬编码一个值时,如在“qq”下面就可以了。因此,我可以看到问题不在回报中,而在价值观中 在这种情况下,您如何读取值Javascript 如何从此函数调用返回值?,javascript,jquery,css,dom,Javascript,Jquery,Css,Dom,我有一个函数来获取图像尺寸。我从createObjectURL发送返回 它可以很好地获取维度,但我无法获取值。我试图得到这两个值,但问题似乎是函数中有一个函数。外部函数不知道内部函数中设置的值。当我硬编码一个值时,如在“qq”下面就可以了。因此,我可以看到问题不在回报中,而在价值观中 在这种情况下,您如何读取值 imgSrc = window.URL.createObjectURL(this.files[0]); var imgSize = getImgSize(imgSrc); var ne
imgSrc = window.URL.createObjectURL(this.files[0]);
var imgSize = getImgSize(imgSrc);
var newWidth = imgSize.retWidth;
var newHeight = imgSize.retHeight;
alert(newWidth);
alert(newHeight);
function getImgSize(imgSrc) {
var newImg = new Image();
newImg.onload = function() {
var nHeight = newImg.height;
var nWidth = newImg.width;
//alert('The image size is ' + width + '*' + height);
}
newImg.src = imgSrc; //this must be done AFTER setting onload
return {
retWidth: nWidth,
retHeight: 'qq'
};
}
您无法取回它们,因为
.onload
是异步的。处理此问题的最简单方法是从加载处理程序内部调用函数
function getImage(){
var imgSrc = window.URL.createObjectURL(this.files[0]);
getImgSize(imgSrc,useImgSize);
}
function getImgSize(src,fn){
var img=new Image();
img.onload=function(){
fn({width:img.width,height:img.height});
}
img.src=src;
}
function useImgSize(dimensions){
alert(dimensions.width);
alert(dimensions.height);
}
在这里,我为流程的每个步骤使用一个函数。您已经启动了getImage进程。然后调用一个实用函数,该函数将图像源和回调函数作为参数(您可以直接调用useImgSize函数,但回调允许您将实用函数用于多种用途)。最后,您可以在useImgSize函数中对维度执行任何操作。您的变量
nHeight
和nWidth
仅存在于onload
函数的范围内,请参见下面的答案。您可以使用Promise
,请参见,因此我在加载处理程序的nextStep中添加了一个函数,但是nextStep做了什么?我会将值传递给该函数,但我仍在调用getImageSize…而不是nextStep。。。它正在接收值。我有点困惑。。。好的,非常困惑。我需要出去一会儿,但稍后会更仔细地看这个。我真的很感谢你的反馈。所以,有点不好意思承认我还是不明白。但是我把代码放进去,它就工作了。我可以通过useImageSize函数访问高度和宽度。我希望从main部分(在本例中是getImg)访问这些值,这样我就可以调用例程来获取不同原因的大小,并对其执行不同的操作。在这种情况下,我想我需要做任何需要useImageSize维度的任务,而不是主要过程,对吗?是的,也许把useImageSize作为主要功能,把其他两个仅仅作为帮助来实现。好的。这很有效。不过,很难将图像大小用于其他用途。因为useImageSize不是我的主要功能。例如,我计划也调用一个模态,我还需要图像大小。但我相信我能解决这个问题。我想我的下一期,也是最后一期。等待图像完全加载,然后删除“正在加载”消息。如果你有任何想法,我喜欢你的意见。我真的迷路了。延迟和承诺完全让我困惑: