我想获取主机名 www.example.com 的 MX 记录。节点有它的功能。
dns.resolveMx(domain, callback)
但我不想要那个回调的东西。我想要同步呼叫之类的东西。例如
var records = dns.resolveMx(domain);
这可能吗 ?
(注意:- 我在 Node 文档中找到了该功能。链接:- http://nodejs.org/api/dns.html)
我想获取主机名 www.example.com 的 MX 记录。节点有它的功能。
dns.resolveMx(domain, callback)
但我不想要那个回调的东西。我想要同步呼叫之类的东西。例如
var records = dns.resolveMx(domain);
这可能吗 ?
(注意:- 我在 Node 文档中找到了该功能。链接:- http://nodejs.org/api/dns.html)
您是否有任何理由要通过网络操作来阻止您的应用程序?DNS 解析器由设计为异步的c-ares库在 C 级别调用。因此,您不能使其同步。这是来自 DNS 模块的代码,删除了不需要的部分:
var cares = process.binding('cares_wrap');
function resolver(bindingName) {
var binding = cares[bindingName];
return function query(name, callback) {
callback = makeAsync(callback);
var req = {
bindingName: bindingName,
callback: callback,
oncomplete: onresolve
};
var err = binding(req, name);
if (err) throw errnoException(err, bindingName);
callback.immediately = true;
return req;
}
}
var resolveMap = {};
exports.resolveMx = resolveMap.MX = resolver('queryMx');
2021 年更新
如果有人正在寻找同步调用,promises
模块下现在有一个子模块。dns
在这里查看更多
https://nodejs.org/api/dns.html#dns_class_dnspromises_resolver
const dnsPromises = require('dns').promises;
const demo1 = await dnsPromises.resolveMx("gmail.com");