我的功能:
function dnsCheck(domain,tld) {
var dns = require('dns')
dns.lookup(domain+'.'+tld, function (err, addresses) {
if (err) return false // means domain avl
else return true // means domain not avl
})
}
我的条件声明:
if(domain_validator(domain,tld) && !dnsCheck(domain,tld)) {
res.end("avl")
}
else {
res.end("not avl")
}
domain_validator函数只是一个正则表达式检查器,如果传递的则返回false,则返回true。
我正在使用快递框架。如何使用回调,promises(Q库)或生成器(koa框架)重构我的代码,以便与async" dns.lookup"完美匹配。功能? 有人可以使用这三种方法修改我的代码吗?
答案 0 :(得分:0)
回调(与其他问题相同)。
var dnsCheck = function(domain, tld, callback) {
require('dns').lookup(domain + '.' + tld, function (err, addresses) {
return callback(err == null);
});
};
// Let's assume domainValidate is async too
var domainValidate = function(domain, tld, callback) {
return callback(true); // Add your logic here
};
dnsCheck(domain, tld, function(isChecked) {
domainValidate(domain, tld, function(isValid) {
if (isChecked && isValid) {
res.end('available');
} else {
res.end('unavailable');
}
});
});
承诺(我不知道Q,但你明白了,我希望)。
var dnsCheck = function(domain, tld) {
return new Promise(function(resolve, reject) {
require('dns').lookup(domain + '.' + tld, function (err, addresses) {
if (err) return reject();
resolve();
});
});
};
// Domain validate will be similar
dnsCheck(domain, tld).then(function() {
return domainValidate(domain, tld);
})
.then(function() {
res.end('available');
})
.catch(function() {
res.end('unavailable');
});
我会留下其他人来展示它是如何用发电机完成的。我对他们并不像我所承诺的那样熟悉。