2016-08-03 2 views
0
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()); 
}) 

Значения возвращаются в последний Еогеасп все жеМассив не может быть разрешено значение

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

Что в настоящее время выводится по сравнению с тем, что вы ожидаете увидеть? – Josh

+2

Вам нужно будет объяснить это лучше. Почему вы подталкиваете функцию к тому, что мы можем считать, это массив ('queries') и что делает эта функция, и где вы это называете. Это похоже на то, что вы вообще не вызываете его, а 'toString()' просто выводит строковое представление функции, которую вы ввели в массив. – adeneo

+0

Вы хотите добавить к массиву * query * результат функции * processMeterreadings *? –

ответ

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' 
     } 
    } 
    })); 
}); 
Смежные вопросы