gpt4 book ai didi

javascript - JavaScript 中处理重复主键的模式

转载 作者:行者123 更新时间:2023-11-29 02:20:28 24 4
gpt4 key购买 nike

我正在使用 npm sequelize 库与 MySQL 一起存储。主键是任务 ID,使用 shortid 库生成。

万一 shortid 给我一个重复的键,有什么好的 Javascript 模式可以处理重复的 id?我正在考虑在捕获到重复键错误时返回 false,并使用外部 while 循环再次尝试创建任务(使用新生成的 ID)。

这是一个非常丑陋的解决方案,那么有没有更好的方法来做到这一点?

        Task.create({
id: shortid.generate(),
content: task.content,
deadline: task.deadline
}).catch(function(error) {
console.log('repeated id');
return false;
}).then(function() {
console.log('yay ok');
return true;
});

最佳答案

您走在正确的轨道上。解决此问题的唯一方法是在重复旧 ID 时实际生成新 ID。为了在代码中表示这一点,您可以将 create 更改为递归函数,如下所示:

function createTask(task){
Task.create({
id: shortid.generate(),
content: task.content,
deadline: task.deadline
}).catch(function(error) {
console.log('repeated id');
createTask(task); // this will keep calling itself until it successfully creates the record with unique id
return false;
}).then(function() {
console.log('yay ok');
return true;
});
}

// now creating the task will look like:
createTask(task);

这绝对是一个乐观的递归函数,假设你得到的错误只是来自重复的 ID,并且你的生成器最终会生成唯一的 ID。如果这些假设中的任何一个不成立,您“可能”会陷入循环,在这种情况下,您将不得不执行这些检查并有条件地中断递归。

关于javascript - JavaScript 中处理重复主键的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32731935/

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