Hello guys,
I always have trouble understanding query times.
I'm trying to create a code to insert an automatically generated collection field.
To make sure the code is unique and not already present in the table, I have created a beforeInsert hook that checks this.
The problem is that it gives me this error "502: Bad Gateway."
CODE:
import wixData from 'wix-data';
export function InfoCerimonie_beforeInsert(item) {
console.log("-------------------START BEFOREINSERT-----------------");
let i = true;
let num = 0;
function creoPassord (caratteri) {
var elencoCaratteri="abcdefghijklmnopqrNOPQRSTUVWXYZ1234567890";
var minimoCaratteri=caratteri;
var massimoCaratteri=caratteri;
var differenzaCaratteri=massimoCaratteri-minimoCaratteri;
var lunghezza=Math.round((Math.random()*differenzaCaratteri)+minimoCaratteri);
var incremento=0;
var password="";
while(incremento<lunghezza){
password+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento++;
}
return (password);
}
let p = new Promise(function(resolve) {
console.log("-------------------Start PROMISE P -------------------");
while (i === true) {
item.DB_CodiceCliente = creoPassord (10);
let codeClienteRows_q = wixData.query("InfoCerimonie").contains('DB_CodiceCliente', item.DB_CodiceCliente);
codeClienteRows_q.count().then(count => {
if (count === 0) {
i = false ;
resolve(item);
}
});
}
});
return p;
}
if I remove the query everything works. I do not know how to get out of it, does someone help me?
Thank You
Thanks for your answer
the search is done after with
codeClientRows_q.count (). then (count => {
However I found this solution:
import wixData from 'wix-data';
export function InfoCerimonie_beforeInsert(item) {
let p = null;
function creoPassord01 (caratteri01) {
var elencoCaratteri="abcdefghijklmnopqrstuvwxyz1234567890";
var incremento01=0;
var password01="";
while(incremento01<caratteri01){
password01+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento01++;
if (incremento01 === caratteri01) {
return (password01);
}
}
}
function creoPassord02 (caratteri02) {
var elencoCaratteri="abcdefghijklmnopqrstuvwxyz1234567890";
var incremento02=0;
var password02="";
while(incremento02<caratteri02){
password02+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento02++;
if (incremento02 === caratteri02) {
return (password02);
}
}
}
function creoPassord03 (caratteri03) {
var elencoCaratteri="abcdefghijklmnopqrstuvwxyz1234567890";
var incremento03=0;
var password03="";
while(incremento03<caratteri03){
password03+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento03++;
if (incremento03 === caratteri03) {
return (password03);
}
}
}
function creoPassord04 (caratteri04) {
var elencoCaratteri="abcdefghijklmnopqrstuvwxyz1234567890";
var incremento04=0;
var password04="";
while(incremento04<caratteri04){
password04+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento04++;
if (incremento04 === caratteri04) {
return (password04);
}
}
}
function promessaPassword () {
p = new Promise(function(resolve) {
item.DB_CodiceCliente = creoPassord01 (10);
item.DB_CodiceInvitato = creoPassord02 (10);
item.DB_CartellaUrlCliente = creoPassord03 (15);
item.DB_CartellaUrlInvitati = creoPassord04 (15);
let codeCliente_q = wixData.query("InfoCerimonie").eq('DB_CodiceCliente', item.DB_CodiceCliente);
let codeInvitato_q = wixData.query("InfoCerimonie").eq('DB_CodiceInvitato', item.DB_CodiceInvitato);
let CartellaCliente_q = wixData.query("InfoCerimonie").eq('DB_CartellaUrlCliente', item.DB_CartellaUrlCliente);
let DB_CartellaInvitati_q = wixData.query("InfoCerimonie").eq('DB_CartellaUrlInvitati', item.DB_CartellaUrlInvitati);
let codeBig_q = codeCliente_q.or(codeInvitato_q).or(CartellaCliente_q).or(DB_CartellaInvitati_q);
codeBig_q.count().then(count => {
if (count === 0) {
resolve(item);
} else {
promessaPassword ();
}
});
});
}
promessaPassword ();
console.log('Promessa risolta');
return p;
}
I'd like to simplify the repeated code but I do not know how to do it:
function creoPassord02 (caratteri02) {
var elencoCaratteri="abcdefghijklmnopqrstuvwxyz1234567890";
var incremento02=0;
var password02="";
while(incremento02<caratteri02){
password02+=elencoCaratteri.charAt(Math.round(Math.random()*elencoCaratteri.length));
incremento02++;
if (incremento02 === caratteri02) {
return (password02);
}
}
}
Thanks for any solution
Hi,
Your wixData query function is not processing the actual search.
Add find() at the end of the statement to initiate the search process.
wixData.query("InfoCerimonie").contains('DB_CodiceCliente', item.DB_CodiceCliente).find()