gpt4 book ai didi

javascript - 如何在 Node.js 中使用异步函数?

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:44 24 4
gpt4 key购买 nike

我的功能:

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 函数只是一个正则表达式检查器,如果通过则返回 true,否则返回 false。

我正在使用express框架。如何使用回调、promise(Q 库)或生成器(koa 框架)重构我的代码,以便与异步“dns.lookup”函数完美配合? 有人可以使用这三种方法修改我的代码吗?

最佳答案

回调(与其他问题相同)。

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');
}
});
});

promise (我不知道 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');
});

我将让其他人来展示它是如何使用生成器完成的。我对他们并不像我 promise 的那样熟悉。

关于javascript - 如何在 Node.js 中使用异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com