NEWS
Script Verständnisproblem
-
Hallo, steh irgendwie auf Kriegsfuss mit JavaScript… :?
folgendes script:
const dns = require('dns');
function getHostip(host) {
dns.lookup(host, function(err, result,family) {
console.log(result);
return result;
});
}
var h=getHostip('fritz.box');
console.log('IP:'+h);
warum bekomme ich diesen Output: IP:undefined
innerhalb der function wird die richtige IP ausgegeben
-
Als Laie ist meine Meinung:
fritz.box ist nirgends deklariert. Damit weiß das Script nicht, was du in diesem Bereich
var h=getHostip('fritz.box');
von ihm willst
P.S.: bitte Code Tags nutzen
-
Als Laie ist meine Meinung:
fritz.box ist nirgends deklariert. Damit weiß das Script nicht, was du in diesem Bereich
var h=getHostip('fritz.box');
von ihm willst
P.S.: bitte Code Tags nutzen `
das ist doch ein string der da übergeben wird…````
'fritz.box'const dns = require('dns');
function getHostip(host) { var res = dns.lookup(host, function(err, result,family) { console.log(result); return result; }); return res; }
var h=getHostip('fritz.box');
console.log('IP:'+h); -
"Fritz.box" ist ein string der an die````
function getHostip(host)in der function getHostIP wird ja die richtige IP Adresse ausgegeben```` console.log(result);
d.h. der string wird an die function übergeben, mir ist nur nicht klar wie die function etwas zuückgegebn kann.
-
fritz.box ist nirgends deklariert. Damit weiß das Script nicht, was du in diesem Bereich
var h=getHostip('fritz.box');
von ihm willst ` Hallo,
die Funktion````
function getHostip(host) {
dns.lookup(host, function(err, result,family) {
console.log(result);
return result;
});
}getHostip(host) verarbeitet 'fritz.box' als Parameter. ..function functionsName(parameter) … Wenn du dann functionsName('Toller Test!'); aufrufst, kannst du innerhalb der Funktion mit der Variable parameter arbeiten der du beim Aufruf der Funktion den Wert 'Toller Test!' mitgegeben hast.. z.B.:```` function testFunktion(parameter) { log(parameter); } testFunktion('Toller Test!'); ````Ergibt die Logausgabe: 'Toller Test!' ;) Gruß
-
Das Problem ist der callback … der kann kein "return" für die Funktion oben drüber machen.
Der Weg das in Javascript zu lösen sind eigene Callback-Funktionen:
const dns = require('dns'); function getHostip(host, callback) { dns.lookup(host, function(err, result,family) { console.log(result); callback(result); }); } getHostip('fritz.box', function(result) { console.log('IP:'+result); });
(Blind geschrieben, aber sollte so tun)
-
Ja, so tut's…
ich hab einfach diese callback Logik noch nicht durchschaut, verinnerlicht....
wenn ich nun das Ergebnis wieder in einer andern Funktion verwenden will, muß doch mal irgendwann etwas "zurückgebbar" sein... :roll:
-
Ja, so tut's…
ich hab einfach diese callback Logik noch nicht durchschaut, verinnerlicht....
wenn ich nun das Ergebnis wieder in einer andern Funktion verwenden will, muß doch mal irgendwann etwas "zurückgebbar" sein... :roll: `
Ja den knoten muss man einmal lösen
ne das bekommst Du ausser über tricks oder so nicht mehr wirklich zurück. Üblicherweise schreibst Du deinen weiteren Code in diese Callbackfunktion wo jetzt das console.log('IP:'+result); steht. So wird alles "flow-technisch" so ausgeführt wie Du es willst.
Das ist aber ok so.
-
Ne Alternative wären promises und optional async/await in TypeScript. Damit kannst du diese callback Logik so umbauen, dass es von außen so aussieht wie ein ganz normaler funktionsaufruf mit Rückgabewert. Ist aber für Anfänger noch schwieriger, das initial zu verstehen. Danach ist der asynchrone Programmablauf imo deutlich einfacher zu verstehen.
Gesendet von unterwegs