JavaScript: возвращаемое значение для асинхронных событий загрузки синхронно? - PullRequest
1 голос
/ 07 июля 2011

С учетом следующей функции:

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]);
}

Как сделать так, чтобы вся функция возвращала true или false? Это не работает как-выше, потому что (я полагаю) функция завершает выполнение до того, как onload делает ...

Я хочу иметь возможность сделать что-то вроде

if (check_min_sizing(input, options)) {
  // do something successful
} else {
  // throw an error
}

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Есть способы заставить это работать, блокируя функцию до тех пор, пока изображение не загрузится, но это плохая вещь. Код вызова должен передать функцию обратного вызова, или две, если вы хотите обратный вызов ошибки скважины.

check_min_sizing(input, options, function(e){
  // do something successful
}, function(error){
  // throw an error
});
0 голосов
/ 07 июля 2011

В асинхронной модели AMAIK нет возможности ждать обратного вызова, и я думаю, что ваш запрос (архитектура) в принципе неверен. Все, что вы хотите сделать на основе результата true или false, должно происходить в вашей функции обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...