javascript – Node.js DNS查找 – 如何设置超时?

我对Node.js很新,我使用node.dns.resolveNs函数一个问题.

某些域名完全关闭,需要大约一分钟才能得到响应,通常是“queryNs ETIMEOUT”.有没有办法让我把它设定在更短的时间,例如10秒钟?

解决方法

我不知道有什么办法直接在函数调用上设置超时,但是您可以在调用周围创建一个小的包装器来处理自己的时间:
var dns = require('dns');

var nsLookup = function(domain,timeout,callback) {
  var callbackCalled = false;
  var doCallback = function(err,domains) {
    if (callbackCalled) return;
    callbackCalled = true;
    callback(err,domains);
  };

  setTimeout(function() {
    doCallback(new Error("Timeout exceeded"),null);
  },timeout);

  dns.resolveNs(domain,doCallback);
};

nsLookup('stackoverflow.com',1000,function(err,addresses) {
  console.log("Results for stackoverflow.com,timeout 1000:");
  if (err) {
    console.log("Err: " + err);
    return;
  }
  console.log(addresses);
});

nsLookup('stackoverflow.com',1,timeout 1:");
  if (err) {
    console.log("Err: " + err);
    return;
  }
  console.log(addresses);
});

上述脚本的输出

Results for stackoverflow.com,timeout 1:
Err: Error: Timeout exceeded
Results for stackoverflow.com,timeout 1000:
[ 'ns1.serverfault.com','ns2.serverfault.com','ns3.serverfault.com' ]

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...