When a user registers a new account, I want to generate a reference code. I'm using the do-while loop for checking exists of the reference code in the database but the loop keeps running at least 2 times although the records in the database are small. When I tried to run the code, it was stuck and keep waiting for the response forever.
Here's my implement:
function makeCode() {
var text = "";
var possible = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz0123456789";
for (var i = 0; i < 8; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
console.log("### makeReferenceCode DONE ###")
return text;
}
function genReferenceCode() {
let referencePromise = new Promise((resolve, reject) => {
let referenceRef = db.ref("ref_codes")
var isExisted = true
var code = makeCode().toUpperCase()
console.log("### Generate Reference Code: " + code)
do {
referenceRef.orderByChild("code").equalTo(code).limitToFirst(1).on("value", function (snapshots) {
if(snapshots.numChildren() > 0) {
console.log("### code existed ###")
code = makeCode().toUpperCase()
isExisted = true
} else {
console.log("### code not existed: " + code)
isExisted = false
resolve({success: true, data: code})
}
}, function (error) {
isExisted = true
reject({success: false, error_code: "GEN_REF_CODE_00", error_msg: "Can't generate reference code!"})
})
} while (isExisted === true)
})
return referencePromise;
}