Я использую элемент ввода файла, с помощью которого пользователь выбирает один текстовый файл:
Я хотел бы создать обещание jQuery, связанное с асинхронным событием объекта FileReader, загружающим содержимое выбранного файла. Я пробовал подобный код в различных контекстах, но, похоже, возникла какая-то проблема с синхронизацией, поскольку я не передаю переменную содержимого в обратный вызов then():
Код: Выделить всё
var promise = $.Deferred(function(dfd) {
var file = $("#myfile")[0].files[0];
var reader = new FileReader();
reader.onload = function(event){
var contents = event.target.result;
dfd.resolve(contents);
};
reader.readAsText(file);
}).promise();
// other code and promises here
$.when(promise).then(function(contents){
console.log(contents);
});
На самом деле здесь задействованы два события. Первое событие происходит, когда пользователь нажимает кнопку «Обзор» и выбирает определенный файл. Второе событие — это когда FileReader загружается с содержимым выбранных файлов. Если кто-нибудь знает, как правильно упаковать это, я обещаю, что при разрешении сохранится содержимое выбранного файла, я был бы признателен за ваше понимание. Заранее спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/125 ... readastext