Я пытаюсь написать простой тест, который создает элемент изображения, проверяет атрибуты изображения, а затем возвращает true / false. Проблема в том, что использование события onload делает тест асинхронным. Само по себе это не проблема (использование обратного вызова, как я сделал в приведенном ниже коде, легко), но я не могу понять, как заключить это в одну функцию, которая возвращает логическое значение.
Я пробовал различные комбинации замыканий, рекурсии и самовыполняющихся функций, но безуспешно.
Итак, мой вопрос: я плотный и упускаю из виду что-то простое, или это на самом деле невозможно, потому что, несмотря ни на что, я все еще пытаюсь заключить асинхронную функцию в синхронные ожидания?
Вот код:
var supportsImage = function(callback) {
var img = new Image();
img.onload = function() {
//Check attributes and pass true or false to callback
callback(true);
};
img.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
};
supportsImage(function(status){
console.log(status);
});
Чтобы было ясно, я хочу иметь возможность обернуть это во что-то такое, что можно использовать как:
if (supportsImage) {
//Do some crazy stuff
}
Спасибо!
(Кстати, я знаю, что есть тонна SO вопросов, касающихся путаницы между синхронным и асинхронным. Приносим извинения, если это может быть сведено к чему-то ранее отвеченному.)