如何在JS中将回调分配给变量

时间:2018-11-23 18:10:41

标签: javascript callback xmlhttprequest base64

图像的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 :(得分:0)

您提出的请求是异步的。这意味着在执行过程中,您的代码将继续进行,因此,当您尝试将其返回值分配给变量时,该变量尚不存在。它返回的是一个promise

所以您需要执行以下操作:

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

答案 1 :(得分:0)

您有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);
}