У меня есть следующий код. Его цель - взять данные из базы данных и отформатировать их в объекты JSON, чтобы они могли быть совместимы с VueCal.
Я запрашиваю данные из базы данных, затем беру каждый результат и создаю объект JSON, помещаю этот объект в массив, затем использую Promise.resolve([array name])
, чтобы, надеюсь, вернуть этот массив с обещанием.
Я обертываю это в блок Promise.all
и затем добавляю все эти разрешенные обещания в другой массив. Этот окончательный массив содержит 4 неопределенных элемента. Почему это?
try {
const results = await Promise.all([
Budget.find({
userEmail: req.body.userEmail
})
.then(budgets => {
let budgetsFormatted = []
for (let i = 0; i < budgets.length; i++) {
if (budgets[i].startDate) {
var startBegin = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm')
var endBegin = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(1, 'hour')
var startEnd = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(budgets[i].duration, 'days')
var endEnd = moment(budgets[i].startDate, 'YYYY-MM-DD HH:mm').add(1, 'hour')
} else {
continue
}
budgetsFormatted.push({
title: budgets[i].title,
start: startBegin,
end: endBegin,
content: octicons.credit_card + '<br>£' + budgets[i].amount
})
budgetsFormatted.push({
title: budgets[i].title,
start: startEnd,
end: endEnd,
content: octicons.credit_card + '<br>£' + budgets[i].amount
})
}
console.log(budgetsFormatted)
Promise.resolve(budgetsFormatted)
})
.catch(err => {
Promise.reject(err)
}),
Notes.find({
userEmail: req.body.userEmail
})
.then(notes => {
let notesFormatted = []
for (let i = 0; i < notes.length; i++) {
if (notes[i].dateCreated) {
var start = moment(notes[i].dateCreated, 'YYYY-MM-DD HH:mm')
var end = moment(notes[i].dateCreated, 'YYYY-MM-DD HH:mm').add(1, 'hour')
} else {
continue
}
notesFormatted.push({
title: notes[i].title,
start: start,
end: end,
content: octicons.note + '<br>' + notes[i].body.substr(1, 10) + '...'
})
}
console.log(notesFormatted)
Promise.resolve(notesFormatted)
})
.catch(err => {
Promise.reject(err)
}),
StudyPlan.find({
userEmail: req.body.userEmail
})
.then(studyplan => {
let studyPlansFormatted = []
for (let i = 0; i < studyplan.length; i++) {
for (let j = 0; j < studyplan[i]['daysAndTimes'].length; j++) {
if (studyplan[i]['daysAndTimes'].timeFrom) {
var start = moment(studyplan[i]['daysAndTimes'].timeFrom, 'YYYY-MM-DD HH:mm')
var end = moment(studyplan[i]['daysAndTimes'].timeFrom, 'YYYY-MM-DD HH:mm').add(studyplan[i]['daysAndTimes'].duration, 'hours')
} else {
continue
}
studyPlansFormatted.push({
title: studyplan[i].title,
start: start,
end: end,
content: octicons.pencil
})
}
}
console.log(studyPlansFormatted)
Promise.resolve(studyPlansFormatted)
})
.catch(err => {
Promise.reject(err)
}),
TodoList.find({
userEmail: req.body.userEmail
})
.then(todolists => {
let todoListsFormatted = []
for (let i = 0; i < todolists.length; i++) {
if (todolists[i].dateDue) {
var start = moment(todolists[i].dateDue, 'YYYY-MM-DD HH:mm')
var end = moment(todolists[i].dateDue, 'YYYY-MM-DD HH:mm').add(1, 'hours')
} else {
continue
}
todoListsFormatted.push({
title: todolists[i].title,
start: start,
end: end,
content: octicons.tasklist
})
}
console.log(todoListsFormatted)
Promise.resolve(todoListsFormatted)
})
.catch(err => {
Promise.reject(err)
})
])
const events = [].concat.apply([], results)
EDIT:
Я оставлю код там, если кто-нибудь захочет его посмотреть. Но это основная структура кода:
const results = await Promise.all([
//Find data in Database
|
-> //Format result to be a JSON object like the following:
{
title: 'Event Title',
start: //Start date of event,
end: //End date of event,
content: '<content> of event object in </calendar>'
}
//Add this object into array
Promise.resolve(the above referenced array)
//Repeat the above for each collection in the database
])
const events = [].concat.apply([], results)