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