Значение возвращается, но не из функции detect
.
Если вы используете именованную функцию для обработчика события загрузки вместо анонимной функции, то будет понятнее, что происходит:
function handleLoad() {
var result = [{ x: 45, y: 56 }];
return result;
}
function detect(URL) {
var image = new Image();
image.src = URL;
image.onload = handleLoad;
}
Значение возвращается из функции handleLoad
в код, который вызывает обработчик событий, но функция detect
уже вышла до этого.В функции detect
нет даже оператора return
, поэтому вы не можете ожидать, что результатом будет что-либо, кроме undefined
.
Один из распространенных способов обработки асинхронных сценариев, подобных этому, должен использовать функцию обратного вызова:
function detect(URL, callback) {
var image = new Image();
image.src = URL;
image.onload = function() {
var result = [{ x: 45, y: 56 }];
callback(result);
};
}
Вы вызываете функцию detect
с обратным вызовом, который будет вызван, когда будет доступно значение:
detect('image.png', function(result){
alert(result);
});