2013-03-31 2 views
0

Я следующий код, который работаетJavascript рефакторинг кода

var exif = function(exifObject) { 
    alert(exifObject.Orientation); 
} 

$(this).fileExif(exif); 

проблема, мне нужно предупредил значение после $(this).fileExif(exif) линии.

Так что я попытался сделать следующее:

function getOrientation(exifObject){ 
    return(exifObject.Orientation); 
} 
getOrientation($(this).fileExif()); 

Это не работает. Как я могу достичь, чтобы получить предупреждение после строки $(this).fileExif(exif)?

Дополнительная информация

console.log(exifObject) возвращает объект с массивом атрибутов, F.E. Orientation.

$(this) заворачивают в этом коде:

$('body').on('change', '#imgFile', function(event) { 

так что это входной файл типа.

+0

Каков выходной объект 'console.log (exifObject);'. Также вы можете показать нам код, который обертывает функцию getOrientation, поэтому мы знаем, что такое '$ (this)'. – 2013-03-31 09:15:25

+0

Дополнительная информация выше, спасибо! –

+0

Я думаю, что это невозможно, потому что кажется, что ваша функция exif() вызывается в вызов fileExif(). Но я не уверен, что вы хотите сделать, поэтому, возможно, я ошибаюсь. – sgmonda

ответ

0

Вы передаете exif, что является функцией, к функции fileExif. Это пример того, что функции являются первоклассными объектами в JavaScript, и в этом случае exif является функцией «обратного вызова». То есть, когда функция fileExif закончена, она передает результат в функцию exif, которая затем вызывается.

С точки зрения исполнения, после функции fileExif будет вызываться alert. Тем не менее, если вы отчаянно хотите код, который будет написан после того, как функции, вы можете объявить функцию, как вы передаете его:

$(this).fileExif(function(exifObject) { 
    alert(exifObject.Orientation); 
}); 

Однако, это, вероятно, не так ясно, как оригинал.

+0

спасибо! Поэтому я решил повторно использовать exifObject вне функции, я мог бы просто изменить «alert» на «return» и уловить возвращаемое значение, но это не работает ...? –

+0

Нет, вам нужно будет вызвать другую функцию внутри анонимной функции, которая передается 'fileExif', и передать' exifObject.Orientation' этой функции. – phenomnomnominal

0

Я нахожу только один плагин fileExif для jQuery. Here it sources. Этот плагин использует родной FileReader. FileReader загружает файл асинхронно. У вас есть 2 способа. Сначала измените код плагина и сделайте его синхронизацией (плохая идея). Напишите свой код в стиле asycn (лучшая практика).

Смежные вопросы