Я работаю с узлом/выражением, mysql и bluebird.Iterate over array в async-обещании
Я использую Promise для создания вызова базы данных async, который работает до сих пор. Но теперь я хочу перебрать результат (массив) и вызвать функцию для вычисления цели.
Мой код разделен на класс контроллера, который обрабатывает запрос get/ post
. В середине класс обслуживания для бизнес-логики, который ведет переговоры с классом базы данных, который запрашивает в базе данных.
На данный момент я просто покажу свой класс обслуживания, потому что все остальное работает отлично, я просто не знаю, как запустить массив результатов и функцию вызова, которая возвращает daterange.
'use strict';
var departmentDatabase = require('../database/department');
var moment = require('moment');
class DepartmentService {
constructor() {
}
getVacation(departmentID) {
return departmentDatabase.getVacation(departmentID).then(function (result) {
//Without promises I did this, which worked.
//for(var i = 0; result.length > i; i++){
// var dateRange = this.getDateRange(new Date(result[i].dateFrom), new Date(result[i].dateTo));
//console.log(dateRange);
//}
return result;
})
//If I do it static, the dateRange function is successfully called
//But here I don´t know how to do it for the entire array.
//Also I don´t know, how to correctly get the result dateRange()
.then(result => this.dateRange(result[0].dateFrom, result[0].dateTo))
//.then() Here I would need an array of all dateRanges
.catch(function (err) {
console.log(err);
});
}
getDateRange(startDate, stopDate) {
console.log("inDateRange");
console.log(startDate + stopDate);
var dateArray = [];
var currentDate = moment(startDate);
while (currentDate <= stopDate) {
dateArray.push(moment(currentDate).format('YYYY-MM-DD'))
currentDate = moment(currentDate).add(1, 'days');
}
return dateArray;
}
}
module.exports = new DepartmentService();
Надеюсь, что кто-то может дать мне пример о том, как это сделать правильно.
Wow, perfect! Это то, что мне нужно. – BayLife