Как вернуть переменную из then() [дубликат]

223
27 мая 2018, 05:20

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа

Функция вычисляет md5 хэш для файлов изображений. Взял с инета. Но знаний моих не хватает чтоб вернуть (return) из функции get_image_filehash() переменную image_filehash.

function get_image_filehash () {
var input = document.getElementById('input_image_file');
if (!input.files.length) {
    return;
}
var file = input.files[0];
var bufferSize = Math.pow(1024, 2) * 10;
calculateMD5Hash(file, bufferSize).then(
    function(result) {
        var image_filehash = {
            'filehash': result.hashResult,
            'status': true
        };
        console.log(image_filehash);
    },
    function(err) {
        var image_filehash = {
            'filehash': null,
            'status': false
        };
        console.log(image_filehash);
    });

}

Кучу сайтов пречитал и не смог понять как это сделать. Подскажите как?

Answer 1

Функция calculateMD5Hash асинхронная. Это значит, что она выполняется не сразу, а спустя некоторое время. Т.е. если вы вызовите функцию таким образом: let imageFileHash = get_image_filehash();, то на момент вызова вы не получите ожидаемого результата, поскольку он еще не получен. Вы можете создать переменную извне и присвоить ей значение, в момент выполнения колбэков.

let imageFileHash;
function get_image_filehash () {
  var input = document.getElementById('input_image_file');
  if (!input.files.length) {
    return;
  }
  var file = input.files[0];
  var bufferSize = Math.pow(1024, 2) * 10;
  calculateMD5Hash(file, bufferSize).then(
    function(result) {
        var image_filehash = {
            'filehash': result.hashResult,
            'status': true
        };
        console.log(image_filehash);
        imageFileHash = image_filehash;
    },
    function(err) {
        var image_filehash = {
            'filehash': null,
            'status': false
        };
        imageFileHash = image_filehash;
    });
}
READ ALSO
Как отвязать SocketIO от cdn(jquery)

Как отвязать SocketIO от cdn(jquery)

Как отвязать SocketIO от cdn(jquery) и поставить свой путь до jquery? С cdn работает нормально

187
Как создать Emoji Nodejs [закрыт]

Как создать Emoji Nodejs [закрыт]

Как реализовать смайлики как в Фейсбук на nodejs или на чистом js?

156
Node.js некорректно работает колбэк на чтение файла

Node.js некорректно работает колбэк на чтение файла

Почему код (NodeJS), указанный ниже, выдает в консоль только первую строку файла?

208
Выдвигающееся боковое меню на CSS3

Выдвигающееся боковое меню на CSS3

Выдвигающееся боковое меню на CSS3: http://stylesystemru/test

233