【发布时间】:2019-05-13 02:38:31
【问题描述】:
我正在尝试使用 Sequelize 创建更新 API 路由:
- 捕获更新前的记录(beforeRec)
- 执行更新
- 捕获更新的记录 (updatedRec)
- 返回 beforeRec 和 updatedRec
我的 Promise 链出现问题,它在执行更新之前执行选择查询之前和之后。我尝试了几种不同的链接和捕获结果的方法,但这是最新的代码:
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 语句等待更新的最佳方法是什么?
任何帮助澄清如何在捕获结果的同时链接承诺将不胜感激!谢谢。
【问题讨论】:
标签: javascript node.js promise sequelize.js es6-promise