let startDate = moment('2016-01-01');
let endDate = moment('2016-01-12');
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, 'days')) {
let queryDate = m.format('DD MMM YYYY');
console.log(queryDate);
queries.push(function (callback) {
processMeterreadings("{ 'params': { 'path': { 'mpan': '2198765119780' },'querystring': {'startdate': '" + queryDate.toString() + " 00:00','enddate': '" + queryDate.toString() + " 23:30','readtype': 'all'}}}",callback);
}
);
}
queries.forEach(function(data){
console.log(data.toString());
})
为最后一个foreach返回的值都是相同的
function (callback) {
processMeterreadings("{ 'params': { 'path': { 'mpan': '2198765119780' },'querystring': {'startdate': '" + queryDate.toString() + " 00:00','enddate': '" + queryDate.toString() + " 23:30','readtype': 'all'}}}",callback);
}
我希望日期的值在数组中的项目中而不是变量名称。
如何更改它以便数组中的项目有2016-01-02代替queryDate.toString()?
答案 0 :(得分:0)
您正在将函数推送到数组中,但这些函数永远不会执行。为了评估函数体中的字符串连接,必须实际执行这些函数。
考虑在代码实际执行的函数中构建字符串 ,而不是将未执行的代码推送到数组中。
您还可以构建一个对象文字,并使用JSON.stringify
来处理将其转换为JSON:
let startDate = moment('2016-01-01');
let endDate = moment('2016-01-12');
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, 'days')) {
let queryDate = m.format('DD MMM YYYY');
console.log(queryDate);
let json = JSON.stringify({
params: {
path: {
mpan: '2198765119780'
},
querystring: {
startdate: queryDate.toString() + ' 00:00',
enddate: queryDate.toString() + ' 23:30',
readtype: 'all'
}
}
})
queries.push(function (callback) {
processMeterreadings(json)
});
}
或者(并且最好),不要这么早地构建JSON。只需在数组中存储日期范围,并在实际准备好执行查询时迭代它们:
let startDate = moment('2016-01-01');
let endDate = moment('2016-01-12');
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, 'days')) {
let queryDate = m.format('DD MMM YYYY');
queries.push(queryDate);
}
queries.forEach(function(queryDate) {
processMeterreadings(JSON.stringify({
params: {
path: {
mpan: '2198765119780'
},
querystring: {
startdate: queryDate.toString() + ' 00:00',
enddate: queryDate.toString() + ' 23:30',
readtype: 'all'
}
}
}));
});