在javascript中传递/访问来自单独线程的值

时间:2015-07-11 04:45:22

标签: javascript jquery multithreading

我正在尝试使用我在其他帖子中找到/编辑的以下代码。 我想使用函数“IsValidImageUrl()”立即返回结果。由于此函数在单独的线程中运行,因此我在获取值时遇到问题,例如,如果我“返回True”;代替“isValid = true;”我总是得到“未定义”作为回报。所以我尝试使用全局变量“isValid”,但它似乎总是落后一步,这意味着我需要调用该函数两次,以获得第一次调用的结果。

我从根本上缺少什么?或者你能提出另一种我能做到的方法吗?

谢谢!

<script>
    var isValid;
    function IsValidImageUrl(url) {
        $("<img>", {
                      src: url,
                      error: function() { isValid=false; },
                      load: function() { isValid=true; }
                    });
     }

    IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif");
    alert(isValid);
    IsValidImageUrl("http://google.com");
    alert(isValid);
</script>

1 个答案:

答案 0 :(得分:0)

问题是您必须等待图像加载或失败才能使用状态。最好的方法是为IsValidImgUrl函数提供一个回调函数(或成功和失败的单独函数),以便在图像加载或发生错误时运行。
在这个例子中,image元素也被传递给回调函数,以便他们知道调用它们的图像。

&#13;
&#13;
function IsValidImageUrl(url, okFunc, errFunc)
{
    var image = document.createElement("IMG");
    image.src = url;
    image.onload = function() {okFunc(image)};
    image.onerror = function() {errFunc(image)};
}

function imageLoadSucces(image)
{
    alert("image loaded: " + image.src);
}

function imageLoadFail(image)
{
    alert("image load error: " + image.src);
}

IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif", imageLoadSucces, imageLoadFail);
IsValidImageUrl("http://google.com", imageLoadSucces, imageLoadFail);
&#13;
&#13;
&#13;