Recuerda que en las ciencias un problema casi siempere puede tener diferentes resoluciones, por lo tanto te enseñaremos lo más óptimo y mejor.
Solución:
No puede porque la función dns.lookup() funciona de forma asíncrona.
Aunque la llamada a dns.lookup() será asíncrona desde la perspectiva de JavaScript, se implementa como una llamada síncrona a getaddrinfo(3) que se ejecuta en el conjunto de subprocesos de libuv. Esto puede tener sorprendentes implicaciones de rendimiento negativas para algunas aplicaciones, consulte la documentación de UV_THREADPOOL_SIZE para obtener más información.
Hay diferentes formas de tomar el resultado. ¡Bienvenido al mundo JS!
Llamar de vuelta
dns.lookup("www.aWebSiteName.am", (err, address, family) =>
if(err) throw err;
printResult(address);
);
function printResult(address)
console.log(address);
Promesa
const lookupPromise = new Promise((resolve, reject) =>
dns.lookup("www.aWebSiteName.am", (err, address, family) =>
if(err) reject(err);
resolve(address);
);
);
lookupPromise().then(res => console.log(res)).catch(err => console.error(err));
Promete asíncrono/espera
async function lookupPromise()
return new Promise((resolve, reject) =>
dns.lookup("www.aWebSiteName.am", (err, address, family) =>
if(err) reject(err);
resolve(address);
);
);
;
try
cons address = await lookupPromise();
catch(err)
console.error(err);
Esto es normal porque “dns.lookup” se ejecuta de forma asíncrona
Entonces no puedes simplemente usar el valor devuelto de la función
Debe hacer su lógica dentro de la devolución de llamada o crear un asistente para prometer la función y ejecutarla en función asíncrona con espera.
Algo como esto:
function lookup(domain)
return new Promise((resolve, reject) =>
dns.lookup(address, (err, address, family) =>
if (err)
reject(err)
else
resolve( address, family )
)
)
async function test()
let ipAddress = await lookup(("www.aWebSiteName.am");
EDITAR:
También puedes usar:
const dns = require('dns');
dnsPromises = dns.promises;
async function test()
let data = await dnsPromises.lookup(("www.aWebSiteName.am");