从嵌套函数中获取返回值

时间:2012-10-22 19:55:01

标签: javascript jquery-plugins google-visualization html5-filesystem

新手写脚本所以请善待。
尝试使用jquery-csv解析器从本地文件创建图表。使用谷歌即 这部分代码似乎无法从中获得返回值。 需要选择已解析文件的返回值。

使用回调更好吗?我将如何实现?已经尝试但似乎无法做到正确。

 function chartData(fileToParse) {
var reader = new FileReader();
reader.readAsText(fileToParse);
reader.onload = function(){
  var csv = event.target.result;
 var parsedData = $.csv.toArrays(csv,{onParseValue:$.csv.hooks.castToScalar});
 return parsedData
};
return reader.onload.value;

reader.onerror = function(){ alert('Unable to read ' + file.fileName); };

}

我已经使用了这段经过修改的代码,以便在屏幕上以表格形式显示数据,但是已经将它带到谷歌服务器上。

任何建议或指示都非常感激。

2 个答案:

答案 0 :(得分:1)

  

“使用回调会更好吗?”

是的,这将是正确的解决方案

  

“我将如何实现?”

  1. chartData函数定义第二个参数。

  2. 当您调用chartData时,将回调作为第二个参数传递。

  3. 在事件处理程序中,以与调用任何函数相同的方式调用回调,但将所需数据传递给它。


  4.                    // receive it-----v
     function chartData(fileToParse, callback) {
         var reader = new FileReader();
         reader.readAsText(fileToParse);
         reader.onload = function () {
             var csv = event.target.result;
             var parsedData = $.csv.toArrays(csv, {
                 onParseValue: $.csv.hooks.castToScalar
             });
             callback(parsedData); // call it
         };
    
         reader.onerror = function () {
             alert('Unable to read ' + file.fileName);
         };
     }
    

    所以你会这样调用它:

    chartData('file/path', function(parsed) {
        console.log(parsed);
    });
    

答案 1 :(得分:0)

首先,请不要让我们要善待,因为那是你的“不友好”假设

通常,您无法从异步函数返回值。您应该考虑为什么要返回一个值,看看是否可以从另一个角度查看它。例如,你需要用parsedData做什么?填充textarea ?,将一些元素附加到Dom?..然后就在那里做!

让我们从parsedData了解您的需求,我们可以提供帮助。

最后,在绝望中,您可以将响应附加到全局对象(如窗口),但这会产生许多其他问题