Javascript 获取错误“;回调不是一个函数";

Javascript 获取错误“;回调不是一个函数";,javascript,node.js,Javascript,Node.js,我想做的是创建一个名为GetYearByCurrency的函数(它放在“dataFunctions”上),并将特定年份的数据和特定货币放到我的索引文件中。在我的“dataFunctions”文件中出现错误“回调不是函数” 我从“数据”文件中的API中提取数据 代码如下: 索引文件: const data = require('./data'); const mssql = require('mssql'); const dataFunctions = require('./dataFunctio

我想做的是创建一个名为GetYearByCurrency的函数(它放在“dataFunctions”上),并将特定年份的数据和特定货币放到我的索引文件中。在我的“dataFunctions”文件中出现错误“回调不是函数”

我从“数据”文件中的API中提取数据 代码如下:

索引文件:

const data = require('./data');
const mssql = require('mssql');
const dataFunctions = require('./dataFunctions');



var AllData;

data.GetData((d)=>{
    AllData=d;
    //var years = Object.keys(AllData.rates)
    //console.log(AllData.rates[years[1]]['EUR']);
    //console.log(AllData);
    console.log(dataFunctions.GetYearByCurrency(d,2016,'USD'));
});

数据文件如下:

const fetch = require('node-fetch');

const GetData =(callback)=>{
    fetch('https://api.exchangeratesapi.io/history?start_at=2015-01-01&end_at=2020-09-11&base=ILS')
    .then(response => response.json())
    .then(data => { 
    callback(data)
    })
}

module.exports ={
    GetData
}
最后是下面的数据函数

 var GetYearByCurrency = (data,year,currency,callback) => {
   var rates = [];
    for (let m = 1; m <= 12; m++) { // Do a loop for each month of the year
        const numM = m < 10 ? `0${m}` : m, //For our method of date filtering, we need to add a leading zero for Jan-Sept
        month = Object.entries(data.rates) // Convert the rates objects to [key, [values]] arrays
          .filter(day => {
            const splitDate = day[0].split("-"); // Bear's method of splitting up the date string so we can compare month and year
            return splitDate[1] == numM && splitDate[0] === "year"; // Filter them to 2019 and the current month
          })
          .map(day => day[1].currency) // Return a new array with only the USD values for that month
          rates.push(month) // Push this array to our result array
          callback(rates);
          
  }
}

module.exports ={
  GetYearByCurrency
}

var GetYearByCurrency=(数据、年份、货币、回调)=>{
风险值率=[];
对于(设m=1;m{
const splitDate=day[0]。split(“-”);//Bear分割日期字符串的方法,以便我们可以比较月份和年份
返回splitDate[1]==numM&&splitDate[0]==“年”;//将它们过滤到2019年和当前月份
})
.map(day=>day[1].currency)//返回一个仅包含当月美元值的新数组
rates.push(month)//将此数组推送到我们的结果数组
回收(费率);
}
}
模块.出口={
GetYearByCurrency
}
关于如何解决这个问题有什么建议吗?

在这行:

console.log(dataFunctions.GetYearByCurrency(d,2016,'USD'));
您需要发送回调作为GetYearByCurrency函数的第四个参数:

dataFunctions.GetYearByCurrency(d,2016,'USD', (rates) => {
    console.log(rates);
});

您已经编写了
GetYearByCurrency
,就好像它是异步的一样,但是我没有看到它内部有任何异步操作来使用回调

删除回调并返回
rates
数组:

const GetYearByCurrency = (data, year, currency) => { // REMOVED CALLBACK
  const rates = [];
  for (let m = 1; m <= 12; m++) { // Do a loop for each month of the year
    const numM = m < 10 ? `0${m}` : m, //For our method of date filtering, we need to add a leading zero for Jan-Sept
    const ratesFiltered = Object.entries(data.rates) // Convert the rates objects to [key, [values]] arrays
          .filter(day => {
            const splitDate = day[0].split("-"); // Bear's method of splitting up the date string so we can compare month and year
            return splitDate[1] == numM && splitDate[0] === "year"; // Filter them to 2019 and the current month
          })
          .map(day => day[1].currency) // Return a new array with only the USD values for that month
    rates.push(ratesFiltered) // Push this array to our result array
  }
  return rates;
}

非常感谢。这就是问题所在problem@EliranHadad若你们采用回调的方式,看到你们的代码是错误的,把回调放到for循环的外部,否则每次迭代它都会调用回调。
dataFunctions.GetYearByCurrency(d, 2016, 'USD', (result) => {
    console.log(result);
});