@ak_wi

JS: Почему FileReader срабатывает только после второго клика?

function getFileContent(elemId) {

            var file = document.getElementById(elemId).files[0];
            if (file) {
                var reader = new FileReader();

                reader.readAsText(file, "UTF-8");
                reader.onload = function (evt) {
                    contentF = evt.target.result;
                };
                reader.onerror = function (evt) {
                    console.log("error reading file");
                };
            }
            return contentF;
        }

var productsFile = getFileContent('someId');
console.log(JSON.parse(productsFile));


При первом вызове функции ничего не возвращает, при повторном - все ок, из input по id извлекается и читается json
Как исправить?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
@grinat
Потому что она асинхронная. Так будет работать
function getFileContent(elemId, cb) {
   ...
  reader.onload = evt => cb(evt.target.result)
   ...
}

getFileContent('someId', (productsFile) => {
console.log(JSON.parse(productsFile))
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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