Javascript 为什么不是';这个简单的函数在Node.js中不起作用吗?

Javascript 为什么不是';这个简单的函数在Node.js中不起作用吗?,javascript,node.js,nodes,Javascript,Node.js,Nodes,我试图从函数返回布尔答案,并希望使用if-else语句进行检查 function dnsCheck(domain,tld) { var dns = require('dns') dns.lookup(domain+'.'+tld, function (err, addresses) { if (err) return false // means domain not registered else return true // means

我试图从函数返回布尔答案,并希望使用if-else语句进行检查

function dnsCheck(domain,tld) {
    var dns = require('dns')
    dns.lookup(domain+'.'+tld, function (err, addresses) {
        if (err) return false // means domain not registered
            else return true // means domain registered
    })
}
我的有条件陈述:

if(domain_validator(domain,tld) && dnsCheck(domain,tld)) {
    res.end("avl")
}
else {
 res.end("not avl")
}

第一个函数单独在if语句中工作,但当我添加第二个函数“dnsCheck”时,它无法按预期工作。我遗漏了什么吗?

像这样重写dnsCheck:

function dnsCheck(domain, tld, callback) {
  var dns = require('dns')
  dns.lookup(domain + '.' + tld, function(err, addresses) {
    callback(err == null);
  });
}
dnsCheck(domain, tld, function(isValidDns) {
  if (isValidDns) {
    // Profit...
  }
});
那么就这样称呼它:

function dnsCheck(domain, tld, callback) {
  var dns = require('dns')
  dns.lookup(domain + '.' + tld, function(err, addresses) {
    callback(err == null);
  });
}
dnsCheck(domain, tld, function(isValidDns) {
  if (isValidDns) {
    // Profit...
  }
});
另一个函数域验证程序也可能是/应该是异步的

并非所有函数都是异步的,但是如果您想知道它是否是异步的,那么函数的签名(通常)将有一个函数作为最后一个参数,并且(通常)有一个
function(err,result)
,就像
dns.lookup
那样

尝试阅读node.js回调。这就是一种解释:


dns.lookup
看起来是异步的。因此
return false
return true
不会将该值返回任何值。由于您必须运行异步代码,因此您必须重构代码并到处发送回调或承诺,而不是简单的函数调用。您如何调用此函数?感谢@PhistucK,让我重构代码,同时考虑该函数的同步性质。所有核心node.js函数都是异步的吗?我如何知道某个特定函数是异步的还是同步的?同步函数只返回一个值。异步函数需要回调函数作为参数。请查看以了解问题和可能的解决方案。它适用于所有异步函数,而不仅仅是Ajax。