Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用异步回调响应返回文件内容?_Javascript_File_Asynchronous - Fatal编程技术网

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代码时都会遇到这个问题,所以您并不孤单!:-)如果有任何其他相关问题,请大声回答。。。