Как назначить обратный вызов в переменную в JS - PullRequest
0 голосов
/ 23 ноября 2018

Base64 для изображения печатается на консоль, но я не могу понять, как присвоить это значение переменной.Я уже некоторое время оглядываюсь и не могу найти простой, краткий ответ.Я действительно новичок в JS.

function toDataURL(url, callback) {
    let xhr = new XMLHttpRequest();
    xhr.onload = function () {
        let reader = new FileReader();
        reader.onloadend = function () {
            callback(reader.result);
        };
        reader.readAsDataURL(xhr.response);
    };
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.send();
    //return xhr.responseText;
}


toDataURL(lpif_anchor_tag_href, function (dataUrl) {
    console.log(dataUrl);
});

toDataURL(lpif_anchor_tag_href_two, function (dataUrl) {
    console.log(dataUrl);
});

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

У вас есть 2 варианта

Использовать обратные вызовы: таким образом, вы можете получить доступ к своему результату только внутри функции обратного вызова

Использовать синхронный запрос: не рекомендуется, так ваш основной поток (страница браузера) будетзаморозить, пока ваш запрос не будет завершен

var request = new XMLHttpRequest();
request.open('GET', '/bar/foo.txt', false);  // `false` makes the request synchronous
request.send(null);

if (request.status === 200) {
    console.log(request.responseText);
}
0 голосов
/ 23 ноября 2018

Ваш запрос асинхронный.Это означает, что пока он выполняется, ваш код продолжается, поэтому, когда вы пытаетесь присвоить его возвращаемое значение переменной, он еще не существует.Он возвращает обещание .

Так что вам нужно сделать что-то вроде этого:

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

promise1.then(function(value) {
  console.log(value);
  // expected output: "Success!"
});

Также вот еще один ответ, который подробно описан для вашего типаслучай использования: https://stackoverflow.com/a/47445455/5471957

...