gpt4 book ai didi

node.js - while 循环检查自定义 id 的唯一性

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:24 24 4
gpt4 key购买 nike

我有一个 MongoDB 数据库,其中设置了一些具有唯一代码(不是主键)的对象。我还应该注意,我正在使用 NodeJS,并且此代码位于我的 server.js 中以连接到 MongoDB 数据库。

为了生成新代码,我随机生成一个代码,并想检查它是否已经存在。如果没有,那么我们使用它没有问题,但如果它已经存在,我想生成另一个代码并再次检查。这是我用来检查 id 是否已存在的代码:

function createPartyId(callback) {
var min = 10000, max = 99999;
var partyId = -1, count = -1;
async.whilst(
function () { return count != 0; },
function (callback) {
partyId = min + Math.floor(Math.random() * (max - min + 1));
partyId = 88888;
getPartyIdCount(partyId, function(num) {
count = num;
});
},
function (err) {

}
);
}

function getPartyIdCount(partyId, callback) {
count = -1;
db.db_name.find({id: partyId}, function(err, records) {
if(err) {
console.log("There was an error executing the database query.");
callback(count);
}
count = records.length;
callback(count);
});
}

最佳答案

首先,您不使用简单的数字递增序列是否有任何特殊原因?这种类型的代码很容易效率低下,生成的数字越多,发生冲突的机会就越大,这意味着您将花费更多的时间为数据生成 ID,而不是处理其余的处理。这不是一个好主意。

但我仍然可以告诉你出了什么问题。

好的,所以 getPartyIdCount() 只会、永远、永远、不会失败地返回 undefined(或者基本上什么也不返回)。

您的 mongo 调用会处理回调中的返回值,并且该回调不会将其值分配给任何内容,因此 return reports.length 只是消失得无影无踪。

您混淆了 createPartyId()(看来您希望同步运行)与 mongo 调用(必须异步运行)。

return 始终与包含 function最近一起使用,因此在本例中它与 function(err,records),而不是函数 getPartyIdCount(partyId)

关于node.js - while 循环检查自定义 id 的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539059/

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