In diesem Code sollten Variablen adminName und adminPassword Werte vor der Ausführung von if-Anweisungen abrufen. Aber wenn Anweisungen vor der then-Handler-Funktion ausgeführt werden. Deshalb funktioniert die Validierung nicht.Nodejs: Warten, bis ein Versprechen aufgelöst wird
function validateAdminLogin()
{
var adminName="";
var adminPassword="";
var isValid=true;
var UserDAO = require('./js/DAO/UserDAO');
var wait=require('wait.for-es6');
var admin=document.getElementById("adminform").elements.namedItem("username").value;
var adminPwd=document.getElementById("adminform").elements.namedItem("pwd").value;
UserDAO.getAdminCredentials().then(function(rows){
adminName= rows.username;
adminPassword=rows.password;
alert(admin+"----"+adminName);
},function(error){
alert(error);
console.log(error);
});
//alert(admin+"-------"+adminName);
if(admin!==adminName)
{
alert("Invalid username");
isValid=false;
}
if(adminPwd!==adminPassword)
{
alert("Invalid password");
isValid=false;
}
return isValid;
}
Ich schließe auch den Code, in dem ich das Versprechen geschrieben habe.
getAdminCredentials: function()
{
var deferred = q.defer();
$query = "SELECT * FROM `user` where type='administrator' ";
connection.connect(function(err) {
if(err){
console.log(err.code);
console.log(err.fatal);
}
// console.log("Successfully connected.");
});
connection.query($query, function(err, rows, fields) {
if(err){
console.log("An error ocurred performing the query.");
console.log(err);
deferred.reject(err);
return;
}
else
{
console.log("Query succesfully executed");
userDTO.setUserId(rows[0].user_id);
userDTO.setUsername(rows[0].username);
userDTO.setPassword(rows[0].password);
deferred.resolve(userDTO);
}
});
return deferred.promise;
connection.end();
}
Wie gehe ich mit dieser asynchronen Natur von nodejs um? Bitte helfen Sie.
Wie rufe ich "validateAdminLogin(). Dann (.......) ....." aus html. –
Sie können es nicht aus HTML so nennen, aber Sie könnten einen zusätzlichen Handler hinzufügen, der das (Event) behandelt ?. Ich nehme an, dass Sie etwas wie ein HTML-Formular haben, so dass Sie dem Formular einen Ereignis-Listener hinzufügen können, um das "[submit] (https://developer.mozilla.org/en-US/docs/Web/Events/submit) zu behandeln. " Veranstaltung. – Siggy
Es funktioniert nicht. Das Skript wird ausgeführt, sobald die Seite geladen wird. Und wenn ich event.preventDefault() hinzufüge, funktioniert alles gut, aber wegen preventDefault() wird das Formular nicht gesendet. –