在JavaScript中处理重复主键的模式

我正在使用npm sequelize库来存储MySQL。 主键是使用shortid库生成的任务ID。

什么是一个好的Javascript模式来处理重复的ID,在不太可能的情况下,shortid给我一个重复的键? 我想在重复键错误被捕获时返回false,并且有一个外部while循环来重新尝试重新创build任务(使用新生成的id)。

这是一个相当不好的解决scheme,那么有没有更好的方法来做到这一点?

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改成recursion函数,如下所示:

 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); 

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