Javascript 如何从函数中返回值,该值是在中的回调函数中生成的?

Javascript 如何从函数中返回值,该值是在中的回调函数中生成的?,javascript,csv,d3.js,Javascript,Csv,D3.js,我需要写一个函数,它将过滤出csv文件中的相关数据,并返回一个包含数据的数组。 csv文件包含作为列之一的时间,我希望在函数参数中提供的指定开始和结束时间内过滤掉这些行。我已经编写了下面的函数filter_data(请注意,它使用的是d3.js): 函数过滤器数据(开始时间、结束时间){ var formatDate=d3.time.format(“%H:%M”), parseDate=formattate.parse; VarData1=[]; d3.csv(“data.txt”,函数(错误

我需要写一个函数,它将过滤出csv文件中的相关数据,并返回一个包含数据的数组。 csv文件包含作为列之一的时间,我希望在函数参数中提供的指定开始和结束时间内过滤掉这些行。我已经编写了下面的函数
filter_data
(请注意,它使用的是d3.js):


函数过滤器数据(开始时间、结束时间){
var formatDate=d3.time.format(“%H:%M”),
parseDate=formattate.parse;
VarData1=[];
d3.csv(“data.txt”,函数(错误,数据){
data.forEach(函数(d){
if(parseDate(d.time)>=parseDate(start_时间)&&parseDate(d.time)

这背后的想法是构建可重用代码来获取数据。但是上面的函数总是返回
未定义的
。我故意将返回值放在回调函数中,因为我知道这将是一个异步调用(我还尝试在末尾放置return语句,但它返回空数组!)

在此实例中不能使用
返回值。您需要传递一个回调函数作为
filter\u data
的参数之一,并使用它返回数据

function filter_data(start_time, end_time, callback) {
  var formatDate = d3.time.format("%H:%M"),
  parseDate = formatDate.parse;
  var data1 = [];
  d3.csv("data.txt", function(error, data) {
    data.forEach(function(d) {
      if(parseDate(d.time) >= parseDate(start_time) && parseDate(d.time) < parseDate(end_time)) {
        data1.push(d);
      }
    });
    callback(data1);
  });
}

filter_data(start_time, end_time, function (data) {
  console.log(data);
});
函数过滤器数据(开始时间、结束时间、回调){
var formatDate=d3.time.format(“%H:%M”),
parseDate=formattate.parse;
VarData1=[];
d3.csv(“data.txt”,函数(错误,数据){
data.forEach(函数(d){
if(parseDate(d.time)>=parseDate(start_时间)&&parseDate(d.time)
该错误是由其他原因引起的。检查数据是否从
d3.csv
正确返回。
function filter_data(start_time, end_time, callback) {
  var formatDate = d3.time.format("%H:%M"),
  parseDate = formatDate.parse;
  var data1 = [];
  d3.csv("data.txt", function(error, data) {
    data.forEach(function(d) {
      if(parseDate(d.time) >= parseDate(start_time) && parseDate(d.time) < parseDate(end_time)) {
        data1.push(d);
      }
    });
    callback(data1);
  });
}

filter_data(start_time, end_time, function (data) {
  console.log(data);
});