Когда я запутываюсь, я всегда делаю разлагаю .Соберите кусочки одну за другой и убедитесь, что все работает.Пытаясь понять ваш код, я получаю что-то вроде этого ...
Каждая функция для входа в систему, получения "суммы задач" из БД и получения "счета задач" из БД.(Задача sum / count - это то, что, как я догадался, были до запросов. Переименуйте, как считаете нужным).
var jsforce = require("jsforce");
var moment = require('moment');
function login(conn) {
return conn.login("myUid", "myPwd");
}
function queryTaskSumForDay(conn, m) {
return conn.query("SELECT SUM(Total_ETA_of_all_tasks__c), SUM(Total_ETA__C) from Daily_Update__c where DAY_ONLY(createddate)= " + m.format('YYYY-MM-DD'));
}
function queryTaskCountForDay(conn, m) {
return conn.query("SELECT count(Id), Task_Type__c FROM Daily_Task__c where DAY_ONLY(createddate) = " + m.format('YYYY-MM-DD') + " group by Task_Type__c");
}
С теми, кто работает, должно быть легко получить сумму и счет за данный день.,Вместо того, чтобы возвращать их в массиве (содержащем два объекта, каждый из которых имеет свойство «z», как в вашем коде), я выбрал более простой одиночный объект, обладающий свойством sum и count.Возможно, вам придется изменить это в соответствии с вашим дизайном.Обратите внимание на использование Promise.all()
для совместного разрешения двух обещаний ...
function sumAndCountForDay(conn, m) {
let sum = queryTaskSumForDay(conn, m);
let count = queryTaskCountForDay(conn, m);
return Promise.all([sum, count]).then(results => {
return { sum: results[0], count: results[1] };
});
}
При такой работе должно быть легко получить массив объектов с количеством сумм за период в семь дней, используя ваш моментлогика и идея Promise.all()
...
function sumAndCountForPriorWeek(conn) {
let promises = [];
let beforeSevenDays = moment().subtract(7, 'days').format('YYYY-MM-DD');
let today = moment().startOf('day');
for (let m = moment(beforeSevenDays); m.diff(today, 'days') <= 0; m.add(1, 'days')) {
promises.push(sumAndCountForDay(conn, m));
}
return Promise.all(promises);
}
При такой работе (обратите внимание на образец здесь?) ваша функция OP крошечная и почти полностью протестирована, потому что мы протестировали все ее части ...
function connectToEP() {
let conn = new jsforce.Connection();
return login(conn).then(() => {
return sumAndCountForPriorWeek(conn)
}).then(result => {
console.log(JSON.stringify(result));
return result;
}).catch(error => {
console.log('error: ' + JSON.stringify(error));
return error;
});
}