javascript - 使用范围之外的异步 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 函数,但它并没有改变行为。
解决方案
推荐阅读
- angular - 如何在 Angular Validators 中更改 required 的验证消息
- c# - 评估的嵌套括号顺序 - 深度与 Ltr
- javascript - Javascript:未从数组中删除元素
- c# - 控制台中的 C# 简单“Hello World”缺少一行代码?
- java - 安全使用 CyclicBarrier.reset
- list - 从groovy中的String列表创建对象列表
- regex - 段落的正则表达式匹配
- c# - 用于存储 SynchronizationContext 或其他视图模型对象以编组到 Ui 线程上的任何普遍接受的模式?
- python - DNN,targets[3] 超出范围错误
- php - gcloud应用引擎中的子文件夹?