首页 > 解决方案 > 限制await dns反向函数js的执行时间

问题描述

我有一个函数 A 执行 dns.reverse(ip) (使用 'dns' js npm)来检查是否使用了 IP。如果它抛出一个错误,它是免费的。大多数 IP 都按预期工作,因为它会立即抛出错误,但问题是某些 IP 没有,它会等待 1.2 分钟超时。

var dns = require('dns')
async function A(ip){
try{
 var host = await dns.reverse(ip)
 if (host.length >1) //its used
}catch(e){
 // free ip if dns.reverse failed
}
}

有没有办法让我将 await dns.reverse(ip) 的执行时间限制为 5 秒,所以它不会等待整个 1.20 分钟,如果查找时间超过 5 秒就会抛出错误?谢谢!

标签: javascriptreverse-dns

解决方案


You can use Promise.race() like this:

const dns = require('dns');

const timeout = (delay, message) => new Promise((_, reject) => setTimeout(reject, delay, message));

const delay = 5000;

async function A(ip) {
    try {
        const host = await Promise.race([dns.reverse(ip), timeout(delay, `DNS resolution timed out after ${delay} ms`)]);
        console.log(host);
    } catch (e) {
        console.error(e);
    }
}

推荐阅读