Javascript 为什么不是';这个简单的函数在Node.js中不起作用吗?
我试图从函数返回布尔答案,并希望使用if-else语句进行检查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
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。