在JavaScript中处理重复主键的模式
Pattern to handle duplicate primary keys in JavaScript
我正在使用npm序列化库与MySQL存储。主键是使用shortid库生成的任务id。
什么是一个好的Javascript模式来处理重复的id,在不太可能的情况下,shortid给了我一个重复的键?我正在考虑在捕获重复键错误时返回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正在被卸载(作为调试模式)
- 包含圆括号的JavaScript Regex模式
- 用于操纵DOM API的Javascript设计模式
- 用javascript创建一个看起来正常分布的模式
- 揭示模块模式(JavaScript) - 这无法访问私有方法
- 匹配每个字符,直到在行首出现模式(JavaScript)
- 用于处理成功、失败、重试的异步请求的设计模式?(JavaScript)
- 模块模式javascript不是函数
- 从自定义模块模式Javascript库调用XMLHttpRequest时不会发生任何事情
- 浏览器中的观察者模式javascript:订阅事件"添加了Dom元素“;并处理这个元素
- IE11在Iframe下的怪癖模式-javascript错误
- 返回具有链接模式javascript的项
- 命令模式 JavaScript 中的执行函数
- gsp下拉值返回NaN在IE7文档模式(javascript)
- 动态模式Javascript
- 保持服务器时间,即使在离线模式(javascript/html5)
- 我如何专业地构建我的模块模式Javascript项目
- 怪癖模式 - JavaScript 不会更新表单选择选项
- 设计模式- JavaScript.安全提取深层(可能不存在)对象属性的通用函数