Javascript 如何使用异步回调响应返回文件内容?
我有这个密码Javascript 如何使用异步回调响应返回文件内容?,javascript,file,asynchronous,Javascript,File,Asynchronous,我有这个密码 function gotFile(file){ readAsText(file); } function readAsText(file) { var reader = new FileReader(); reader.onloadend = function() { var string = evt.target.result; }; alert(string) // returns null
function gotFile(file){
readAsText(file);
}
function readAsText(file) {
var reader = new FileReader();
reader.onloadend = function() {
var string = evt.target.result;
};
alert(string) // returns null
reader.readAsText(file);
}
显然,我试图从同步函数中的异步回调中得到结果,但这是不可能的
所以我改变了我的代码如下:
function gotFile(file){
readAsText(file,function(str){
return str;
});
}
function readAsText(file,callback) {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
};
reader.readAsText(file);
alert(callback);
}
将字符串返回给我
function(str){
return str;
}
我怎样才能做到这一点
谢谢在更新版本中,您仍在尝试使用异步操作,就好像它是同步的一样 在
callback
函数中,返回str
值是没有意义的。您需要改为使用str
值,就在callback
内部(或者在从callback
调用的另一个函数中)
例如:
function gotFile(file){
readAsText(file,function(str){
alert(str);
});
}
function readAsText(file,callback) {
var reader = new FileReader();
reader.onloadend = function() {
callback(reader.result);
};
reader.readAsText(file);
}
注意区别:我们没有从
callback
返回str
,而是在那里使用str
(调用alert
函数)执行一些操作。我想把这个字符串值放在一个全局变量中,并在其他函数中使用它。发出警报对我没有帮助,你的其他函数怎么知道字符串值已经准备好了?不会的。你需要从回调函数中调用另一个函数。真的吗?我不能在这个函数中等待它,然后在另一个函数中使用它?这里要解决的问题是调用这些函数的时间。可以理解的是,您希望将值放在全局中以供以后使用,但实际情况并非如此。您必须有某种方法让另一个函数知道数据已经准备好,您可以通过在数据准备好时调用它来做到这一点。这是回调函数的内部。我很高兴,很高兴这是有用的。几乎每个人在开始使用异步JavaScript代码时都会遇到这个问题,所以您并不孤单!:-)如果有任何其他相关问题,请大声回答。。。