gpt4 book ai didi

javascript - 序列化更新返回之前和之后的结果

转载 作者:行者123 更新时间:2023-12-03 00:33:52 25 4
gpt4 key购买 nike

我正在尝试使用 Sequelize 创建一个更新 API 路由,它将:

  1. 捕获更新前的记录(beforeRec)
  2. 执行更新
  3. 捕获更新的记录 (updatedRec)
  4. 同时返回 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 语句等待更新的最佳方法是什么?

任何有助于澄清如何链接 promise 并同时捕获结果的帮助将不胜感激!谢谢。

最佳答案

尝试了多种方法后,终于可以使用嵌套了:

router.put('/:id', (req, res) => {
const pk = req.params.id;
let beforeRec;

Master.findByPk(pk)
.then(rec => { beforeRec = rec; })
.then(() => {
Master.update(
req.body,
{ where: {id: pk} }
)
.then(() => {
Master.findByPk(pk)
.then(rec => { return rec; })
.then((afterRec) => {
return res.json({beforeRec, afterRec})
})
})
})
.catch(err => {
return res.status(400).json({'error': err});
});
});

如果我不嵌套第二个 Master.findByPk,那么 Master.update() 最终会最后执行。另外,虽然我可以在 Promise 链之外设置 beforeRec,但它对 afterRec 不起作用。

我不喜欢它,因为我仍然对 promise 感到困惑,但它返回了预期的结果。然而,由于嵌套困惑,我不确定 catch() 属于哪里。它会捕获嵌套 then() 中的错误吗?只有进一步的测试才能证明。

关于javascript - 序列化更新返回之前和之后的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com