在范围之外使用异步javascript值

时间:2018-11-30 15:46:19

标签: javascript ajax asynchronous scope

我对javascript还是很陌生,并且一直在研究有关如何纠正异步行为引起的问题的指南,但是这种情况似乎无法通过在函数中使用闭包来解决。我要做的就是访问完成后在异步函数内正确设置的值,但是无论我将哪种变量分配给设置值,它都会返回到异步函数范围之外的原始值(未定义)

function callbackClosure(i, callback) {
    return function () {
        return callback(i);
    };
}

var base64data;
var reader = new FileReader();

reader.readAsDataURL(e.data);
reader.onloadend = function () {
    base64data = reader.result;
    base64data = base64data.split(",")[1];
    alert("0: " + base64data);    //base64data is correct here    
};                    
alert("1: " + base64data);   //base64data value needs to be set correctly at this point, but it's undefined
$.ajax({
    cache: false,
    url: _w.emailConfirmationReportsUrl +'?mapData="' + base64data + '"'
});

令人沮丧的是,在第一个警报0(首先被调用)时base64data的值显然是正确的,但是在警报1再次未定义。出于某种原因,我不能在onloadend函数中使用ajax。谁能解释警报0和警报1之间发生了什么事情,这将导致base64data丢失其设置的值?我已经尝试在几乎每个使用过的函数的许多不同位置使用callbackClosure函数,但是它并没有改变行为。

0 个答案:

没有答案