NO__OB
@NO__OB

FILEREADER Как вернуть результат?

Есть функция, как в данном случае сделать return this.result; То в этом примере не возвращает

function readFile() {
    File.file(function(file) {
        var reader = new FileReader();
        reader.onloadend = function() {

            return this.result;

        };
        reader.readAsText(file);
    });

}
  • Вопрос задан
  • 4757 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Если присмотреться, то в вашем коде три function и только один return.

Вы понимаете, что FileReader асинхронный?
Куда вы хотите вернуть результат?
Ответ написан
Комментировать
@dimentimor
Не понятно, в каком виде у вас file. Если в таком же, как когда указываем файл через диалоговое окно, то попробуйте написать как-то так:
function readFile(file) {
	var reader = new FileReader();

	// нужно, что бы функция была вызвана в контексте file
	// так что готовим ее прямо сейчас
	reader.onload = (function (file) {
		return function () {
			// есть шанс, что содержимое здесь )
			console.log(this);
			console.log(arguments);
			return this.result;
		};
	})(file);

	reader.readAsText(file);
}


Вот рабочий пример с выбором и чтением файла через input

<input type="file" id="input">

// при выборе файла
document.getElementById('input').addEventListener('change', function (e) {
	
	var file = e.target.files[0];  // первый элемент массива файлов	
	var reader = new FileReader();

	// при успешном завершении операции чтения
	reader.onload = (function (file) {
		return function (e) {
			var r = e.target;
			// получаем содержимое файла, состояние чтения, ошибки(или null)
			console.log(r.result, r.readyState, r.error);
		};
	})(file);

	// получить содержимое как текст
	reader.readAsText(file);
	// или:
	// readAsText, readAsArrayBuffer, readAsDataURL, readAsBinaryString
});


И еще немного инфы по reader. Прямиком из моего "файла с полезными штуковинами"
нужно боольше инфы
// Конструктор
// -------------------------------------
FileReader FileReader();



// Свойства
// -------------------------------------
// DOMError представляет собой ошибку, происходящую при чтении файла.
FileReader.error 		// Read only

// Число обозначающее состояние объекта FileReader. 
// Принимает одно из значений State constants.
FileReader.readyState 	// Read only

// Данные из файла. Значение свойства действительно только когда 
// завершится операция чтения, причем формат данных зависит от способа, 
// с помощью которого процесс был вызван.
FileReader.result 		// Read only



// Обработчики событий
// -------------------------------------
// Обработчик для события abort.
// Это событие срабатывает каждый раз, когда прерывается операция чтения.
FileReader.onabort

// Обработчик для события error.
// Это событие срабатывает каждый раз, когда при чтении возникает ошибка.
FileReader.onerror

// Обработчик для события load.
// Это событие срабатывает при каждом успешном завершении операции чтения.
FileReader.onload

// Обработчик для события loadstart.
// Это событие срабатывает каждый раз, при запуске процесса чтения.
FileReader.onloadstart

// Обработчик для события loadend.
// Это событие срабатывает каждый раз по окончании процесса чтения 
// (не важно, успешном или нет).
FileReader.onloadend

// Обработчик для события progress.
// Это событие срабатывает во время чтения данных из Blob.
FileReader.onprogress


// Методы
// -------------------------------------
// Запускает процесс чтения данных указанного Blob, 
// по завершении, аттрибут result будет содержать данные файла в виде ArrayBuffer.
FileReader.readAsArrayBuffer()

// Запускает процесс чтения данных указанного Blob, 
// по завершении, аттрибут result будет содержать бинарные данные файла в виде строки.
FileReader.readAsBinaryString()

// Запускает процесс чтения данных указанного Blob, 
// по завершении, аттрибут result будет содержать данные файла в виде data: URL.
FileReader.readAsDataURL()

// Запускает процесс чтения данных указанного Blob, 
// по завершении, аттрибут result будет содержать данные файла в виде текста.
FileReader.readAsText()

// Отмена операции чтения. После вызова, значение readyState станет равным DONE.
FileReader.abort()

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы