В следующей функции после создания документа work я сохраняю изображения из запроса, полученного через модуль multer. При сохранении документов image я пытаюсь обновить обработайте документ нажатием всех _id
изображений.
Но каким-то образом, если вы посмотрите на приведенный ниже код и сосредоточитесь на console.log s второй console.log выполняется первым, хотя я использовал .then при создании изображений. Это также означает, что я получаю устаревший work документ в последние строки кода.
В документах говорится, что Model.create () возвращает Promise , что означает, что оно должно выполняться синхронно, если я использую . тогда () (если я не ошибаюсь). Но это не так в моей функции:
function addToDB(req, res, model) {
let imagesToAdd = [];
Works.create(model)
.then(work => {
req.files.forEach(image => {
let path = image.path.split('').map(char => char === '\\' ? '/' : char).join('');
let imageObj = {
fileName: image.filename,
mimeType: image.mimetype,
imageURL: `${req.baseURL}/${path}`,
workId: work._id
};
imagesToAdd.push(imageObj);
});
Images.create(imagesToAdd)
.then(createdImages => {
let imageIds = [];
createdImages.forEach(image => {
console.log(image._id);
imageIds.push(image._id);
});
Works.updateMany({_id: work._id}, {$push: {images: {$each: imageIds}}}).catch(err => handleError(err));
})
.catch(err => handleError(err));
console.log('>'+work._id);
return work._id;
})
.then(workId => {
Works.findById(workId)
.then(foundWork => {
res.json(foundWork);
})
.catch(err => handleError(err));
})
.catch(err => handleError(err));
}
А вот консоль после отправки работы документ:
cmd после выполнения:
И есть ответ:
Ответ после выполнения:
Там было добавлено 2 изображения. Выше в ответ вы видели, что массив images не имеет никакого элемента, а в пн go идентификаторы изображений были сохранены:
Сохраненная работа после выполнение:
Конечная цель - ответить только что созданной работой , в которую включены идентификаторы изображений, поэтому я можно дополнительно заполнить массив images документа work и workId в документе image .
Как можно заставить код работать синхронно?