Javascript 从异步dns.lookup()函数返回值时出错

Javascript 从异步dns.lookup()函数返回值时出错,javascript,node.js,async-await,dns,Javascript,Node.js,Async Await,Dns,我正在编写一个函数,使用dns.lookup()函数验证url,定义如下: const dns = require('dns'); const verifyURL = (url) => { const protocolRegEx = /^https?:\/\/(.*)/i; const hostnameRegEx = /^([a-z0-9\-_]+\.)+[a-z0-9\-_]+/i; if (url.match(/\/$/i)) { url = url.slice

我正在编写一个函数,使用
dns.lookup()
函数验证
url
,定义如下:

const dns = require('dns');

const verifyURL = (url) => {
  const protocolRegEx = /^https?:\/\/(.*)/i;
  const hostnameRegEx = /^([a-z0-9\-_]+\.)+[a-z0-9\-_]+/i;

  if (url.match(/\/$/i)) {
    url = url.slice(0,-1);
  }

  const protocol = url.match(protocolRegEx);
  if (!protocol) { 
    return false;
  }

  const hostname = protocol[1].match(hostnameRegEx);
  if (hostname) {
    dns.lookup(hostname[0], (err, adderss) => {
      if (err) return false;
      return adderss;
    })
  }
}
我试图从传递给
dns.lookup()
函数的
回调内部返回
true
false

(async () => { 
  let x = await verifyURL('https://stackoverflow.com/')
  console.log(x);
})();
但每次运行此代码时,我都会得到
未定义的
作为返回值。 我已经试过了,但没用。
请帮帮我。谢谢

您正在等待一个函数verifyURL,该函数不返回承诺

一个选项是修改
verifyURL
函数以返回承诺

const verifyURL=(url)=>{
常量protocolRegEx=/^https?:\/\/(.*)/i;
const hostnameRegEx=/^([a-z0-9\-\\+\)+[a-z0-9\-\\\+/i;
if(url.match(/\/$/i)){
url=url.slice(0,-1);
}
const protocol=url.match(protocolRegEx);
如果(!协议){
返回false;
}
const hostname=协议[1]。匹配(hostnameRegEx);
//验证这个!我添加这个来返回false if!hostname
如果(!主机名){
返回错误
}
返回新承诺((解决、拒绝)=>{
dns.lookup(主机名[0],(错误,地址)=>{
如果(错误){
退货拒绝(err);
}
//在这里我决心解决。你可以解决为真,正如你在你的帖子中提到的。
返回解析(地址)
});
});
}
你也应该处理拒绝承诺的问题。 例如,查找将给您一个错误“getaddrinfo ENOTFOUND stackoverflow2.com”

(异步()=>{
试一试{
设x=等待验证URL('https://stackoverflow.com')
控制台日志(x);
}捕获(e){
控制台错误(e.message)
}
})();

另一种选择是使用

我的理解是
异步等待
与承诺一起工作。您是否应该改用DNS承诺API?