NodeJS Variable aus Function bekommen?

5 Antworten

Höchstwahrscheinlich wird die Funktion (was wohl ein Callback von bcrypt.hash ist) asynchron aufgerufen. Bedeutet, das console.log() außerhalb dieser Funktion wartet nicht darauf, dass die Variable databasePassword innerhalb der Funktion gesetzt wird, sondern wird direkt ausgeführt. Die Variable wird daher erst dann gesetzt, wenn das console.log() außerhalb der Funktion längst vorbei ist.

Ist es dringend erforderlich, dass das console.log() außerhalb des Callbacks/der Funktion steht?

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung

tom20032005 
Fragesteller
 24.10.2019, 18:23

Ja an sich schon, weil es wird immer unübersichtlicher. Du musst dir vorstellen, ich mache eine registrier Funktion. Ich habe davor schon abgefragt, ob es die E-Mail gibt unsw. Es wird langsam unübersichtlich, wenn das jetzt auch noch da rein kommt. Wie könnte man das Problem denn lösen? Also so lange warten,

0
Functional  24.10.2019, 21:34
@tom20032005

Wenn du mit unübersichtlich die Einrückung meinst, die irgendwann einfach zu viel wird, kannst du natürlich deine Funktionen in eigene Funktionen auslagern. Sprich, statt

bcrypt.hash(passwort, 10, function(err, hash){
  //do this
  //and do that
}); 

Könntest du auch

bcrypt.hash(passwort, 10, dosomething(err, hash)); 

function dosomething(err, hash){
  //do this
  //and do that
}

Dadurch dürfte das Ganze wieder übersichtlicher werden. Ansonsten, es gibt für dein "Problem" einen eigenen Begriff, Callback Hell, also wortwörtlichm Callback-Hölle, womit fast jeder Javascript-Programmierer zu kämpfen hat. Hier eine recht interessante Seite dazu, wo du ggf. Ansätze für einen anderen Programmierstil bekommst: https://blog.hellojs.org/asynchronous-javascript-from-callback-hell-to-async-and-await-9b9ceb63c8e8 sowie http://callbackhell.com/

0

Da die Funktion ein Übergabeparameter einer anderen ist, vermute ich mal, dass diese Funktion asynchron aufgerufen wird.

Also musst du den Funktionsaufruf abwarten.

Warum muss console.log() unbedingt außerhalb der Funktion stehen?

Woher ich das weiß:Hobby

tom20032005 
Fragesteller
 24.10.2019, 18:02

Ich denke, wenn ich alles in die Funktion schreibe, wird es dann irgendwann unübersichtlich. So etwas muss doch möglich sein oder?

0

Es sieht so aus als wäre hash undefined, und damit auch databasePassword. Denn "undefined" ist ein Wert den man in JS zuweisen kann.

Ist denn "password" am Anfang der Funktion überhaupt gesetzt?

Woher ich das weiß:Berufserfahrung – 20 Jahre Berufserfahrung

Hast du denn die Funktion schon einmal davor aufgerufen? Ansonsten wird die Variable ja nie belegt werden.

Woher ich das weiß:Berufserfahrung – Anwendungsentwickler (vorwiegend .NET)

Du könntest mal versuchen databasePassword vor der Funktion einen Wert zuzuweisen. Ich bin in JS nicht so fit, kann aber sein das der Ort der Deklaration weniger aussagt als der Ort der ersten Initialisierung.

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾