Javascript:同步返回异步onload事件的值?

时间:2011-07-07 05:08:22

标签: javascript javascript-events

给出以下功能:

function check_min_sizing (input, options) {
  reader = new FileReader();
  reader.onload = function (e) {
    img_rsc = e.target.result;
    image = new Image();
    image.onload = function () {
      if (image.width < options.min_width || image.height < options.min_height) {
        return false;
      } else {
        return true;
      }
    };
    image.src = img_rsc;
  };
  reader.readAsDataURL(input.files[0]);
}

如何让整个函数返回truefalse?它不能正常工作因为(我相信)函数在onload之前完成执行...

我希望能够做一些像

这样的事情
if (check_min_sizing(input, options)) {
  // do something successful
} else {
  // throw an error
}

2 个答案:

答案 0 :(得分:3)

有一些方法可以通过阻止函数直到图像加载来完成这项工作,但这是一件坏事。调用代码应传入一个回调函数,如果你想要一个错误回调,那么调用两个函数。

check_min_sizing(input, options, function(e){
  // do something successful
}, function(error){
  // throw an error
});

答案 1 :(得分:0)

在异步模型中,AMAIK没有办法等待回调,我认为你的请求(架构)基本上是错误的。无论你想根据truefalse结果做什么,都应该在你的回调函数中发生。