首页 > 解决方案 > 使用范围之外的异步 javascript 值

问题描述

我对 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 + '"'
});

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

标签: javascriptajaxasynchronousscope

解决方案


推荐阅读