Ich mag dies ein Ergebnis will var rolecheck = ['289773584216358912','281531832938266625'];
NodeJS async SQL-Variable
Nur geholt aus einer Datenbank, so kann ich es mit Ids zu einem anderen Array vergleichen (und ja, es sollte ein String sein)
Dies dient dazu, vor der Ausführung eines Befehls zu prüfen, ob der Benutzer eine bestimmte Rolle mit der Berechtigung für diese Rolle besitzt. Es muss also eine Funktion sein, die angerufen werden kann.
Ich habe nie gearbeitet NodeJS Asynchron-Funktionen mit, so ich habe keine Ahnung, wie diese SQL auf ein Array konvertieren:
Der Inhalt des .dann ist nur versuchen, einige Code von mir, wie es um herauszufinden, funktioniert, also ignoriere die Konsolenlogs etc. Hinweis: Die Logs geben die korrekten Rollen zurück, aber ich brauche sie nur, um sie in meiner Vergleichsfunktion zu verwenden.
sql.all("SELECT roleId FROM roles WHERE punish = 'true' and guildId = '"+guildids+"'").then(row => {
if (row) {
var rolecheck = [];
row.forEach(function(row){
rolecheck.push(row.roleId);
});
console.log(rolecheck);
}
});
Rückgabe funktioniert nicht, also brauche ich eine Abhilfe.
Hier ist, wo ich es vergleichen: (diese in Ordnung, solange rolecheck arbeitet und role.id korrekt definiert sind, was sie nicht sind es funktioniert, wenn ich die rolecheck Array hard
member.forEach(function(role){
if(HasRole(rolecheck, role.id)){
console.log('user has role: '+role.name);
return true;
}
});
Dies ist async. Sie können nicht von '.then'-Handler zurückkehren, weil der Kontext der äußeren Funktion nicht mehr existiert, wenn' .then 'ausgelöst wird. Sie müssen Ihren Scheck ** in ** dem '.then' Handler erledigen. Mit anderen Worten, Ihr Code muss verschachtelt geschrieben werden. – freakish
Ich hatte Angst davor. Gibt es keine Alternative für .dann? –
Nun, Sie müssen die Dinge nicht wirklich "verschachtelt" machen. Sie können immer '.then()' Aufrufe verketten, vorausgesetzt, Ihr vorheriges '.then()' gibt ein Zusicherungsobjekt zurück. Aber das hängt ganz davon ab, wie dieses 'sql' Objekt implementiert wird. – freakish