我在节点js app中为mongodb集合创建了自己的主键。为了确保生成的密钥是唯一的,我必须检查该生成密钥的集合是否已经存在。这是代码,但由于同步调用而无效:
let id = makeid()
let unique = false
$this = this
while(!unique) {
try {
property.findById(id, 'proptype', function (error, property) {
if (error) {
console.log('not found, generated key is unique')
$this.unique = true
} else {
$this.unique = false
$this.id = makeid()
}
})
} catch(e)
{
console.log('exception: ' + e)
}
}
如何解决此问题?我正在寻找工作代码的答案。会发生什么,它变成无限循环,每个循环重复执行查询。
答案 0 :(得分:1)
试试这个
const uniqueCheck = async () => {
let id = makeid();
let unique = false
$this = this
while (!unique) {
try {
const property = await (property.findById(id, 'proptype').exec());
if (property) {
$this.unique = false;
$this.id = makeid();
} else {
$this.unique = true
}
} catch (e) {
console.log('exception: ' + e);
$this.unique = true
}
}
}
答案 1 :(得分:0)