Javascript 如何在Node.js中使用异步函数?
我的职能:Javascript 如何在Node.js中使用异步函数?,javascript,node.js,asynchronous,callback,promise,Javascript,Node.js,Asynchronous,Callback,Promise,我的职能: 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_vali
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函数只是一个正则表达式检查器,如果传递的是else false,则返回true
我使用的是express框架。如何使用回调、承诺Q库或生成器膝关节炎框架来重构我的代码,以便与异步DNS查找函数进行良好的匹配?有人能用这三种方法修改我的代码吗?回调与另一个问题相同
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');
});
我会让其他人来展示发电机是怎么做的。我对它们不太熟悉。请参见和。您不能从dnsCheck函数返回答案,因为dns.lookup是异步的,它会在dnsCheck完成并返回后返回。您当前的返回值只是被返回到网络处理代码的内部,而不会返回到任何地方。您可能希望将回调传递到dnsCheck,并在获得dns.lookup结果时调用该回调。这就是异步编程以及如何使用异步操作进行编程。是的。你所要求的是一项相当大的任务。我将在下面提供回电和承诺的答案。