Помните, что все эти обращения к базе данных являются асинхронными. Чтобы получить значения, нужно дождаться разрешения обещания и вернуть значения. В этом случае мы можем дождаться выполнения всех Обещаний с Promise.all, а затем в следующем then
контексте
module.exports.deleteLockedEmail = (req, res, next) => {
const maxDateAd = new Date().getTime() - 2592000000;
const adIdsToDelete = [];
Admin.find({})
.then(emailLocked => {
const mapToLockedEm = emailLocked.map(element => {
return User.findOne({email:element.email})
.then(userLocked => {
return adIdsToDelete.push(userLocked)
})
.catch(error => console.log(error))
})
return Promise.all(mapToLockedEm)
}).then(() => {
// In this context the adIdsToDelete will be filled
});
.catch(error => console.log(error))
cron.schedule("* * * * *", function() {
console.log("running a task every minute => delete locked ads");
});
}
Кроме того, в общем случае работать с такими переменными, как * 1005, может быть немного сложно. * поскольку они находятся в другой области, чем ваша цепочка обещаний. Как это произошло в вашем примере - это может сбивать с толку, когда эта переменная фактически заполняется значениями.
Вы можете переписать ее следующим образом
module.exports.deleteLockedEmail = (req, res, next) => {
const maxDateAd = new Date().getTime() - 2592000000;
Admin.find({})
.then(emailLocked => {
const mapToLockedEm = emailLocked.map(element => {
return User.findOne({email:element.email})
.catch(error => console.log(error))
})
return Promise.all(mapToLockedEm)
}).then(adIdsToDelete => {
// In this context the adIdsToDelete will be filled
});
.catch(error => console.log(error))
cron.schedule("* * * * *", function() {
console.log("running a task every minute => delete locked ads");
});
}