Я пытаюсь создать маршрут API обновления с помощью Sequelize, который будет:
- Захватить запись перед обновлением (beforeRec)
- Выполнить обновление
- Захват обновленной записи (updatedRec)
- Возврат как beforeRec, так и updatedRec
У меня проблемы с цепочкой обещаний, которая выполняет запросы выбора до и после перед выполнениемобновление.Я пробовал несколько разных способов объединения и захвата результатов, но вот последний код:
router.put('/:id', (req, res) => {
const pk = req.params.id;
const getBeforeRec = Master.findByPk(pk)
.then(rec => {return rec})
const updateRec = getBeforeRec
.then(
Master.update(
req.body,
{ where: {id: pk} }
)
)
const getUpdatedRec = updateRec
.then(
Master.findByPk(pk)
.then(rec => {return rec})
);
return Promise.all([getBeforeRec, updateRec, getUpdatedRec])
.then( ([beforeRec, updateRes, afterRec]) => {
return res.json({beforeRec, afterRec})
})
.catch(err => {
return res.status(400).json({'error': err});
});
});
Вот обработанный пример того, как результаты выглядят:
{
"beforeRec": {
"id": 100,
"updated_col_name": false,
},
"afterRec": {
"id": 100,
"updated_col_name": false,
}
}
В консоли, Я вижу, что обновление выполняется последним:
Executing (default): SELECT [id], [updated_col_name] FROM [master] WHERE [master].[id] = N'100';
Executing (default): SELECT [id], [updated_col_name] FROM [master] WHERE [master].[id] = N'100';
Executing (default): UPDATE [master] SET [updated_col_name]=1 WHERE [id] = N'106'
Каков наилучший способ заставить второе предложение select ждать обновления?
Любая помощь в разъяснении, как связывать обещания, покаЗахватив результаты по пути будут с благодарностью!Спасибо.