如何从 JS 代码中删除 dns 依赖项



JS新手,找到了一些示例代码并对其进行了修改以适应我的目的[1]。它工作正常,但是 *dns.reverse(IP, (err( * 与我的代码完全无关。基本上,我根本不需要dns模块。我尝试以几种方式删除它,但没有奏效。每次代码崩溃时。 想法,如何删除这些不必要的部分?

提前非常感谢,

[1]

const dns = require('dns');                                                                                                                                                                                                        
const cache = {};                                                                                                                                                                                                                  
const crypto = require('./fpe');                                                                                                                                                                                                   
const cipher = crypto({});                                                                                                                                                                                                         

function reverse(IP) {                                                                                                                                                                                                             
if (!cache[IP]) {                                                                                                                                                                                                              
cache[IP] = {                                                                                                                                                                                                              
promise: new Promise((resolve, reject) => {                                                                                                                                                                            
dns.reverse(IP, (err) => {                                                                                                                                                                                         
if (!err) {                                                                                                                                                                                                    
const value = cipher.encrypt(IP);    // cipher.encrypt(IP) give back another IP of format xxx.xxx.xx.xx                                                                                                                                                                       
cache[IP].value = value;                                                                                                                                                                                   
resolve(value);                                                                                                                                                                                            
} else {                                                                                                                                                                                                       
resolve([]);                                                                                                                                                                                               
}                                                                                                                                                                                                              
}); //dns.reverse                                                                                                                                                                                                  
}), //promise                                                                                                                                                                                                          
}; //cache[ip]                                                                                                                                                                                                             
return cache[IP].promise;                                                                                                                                                                                                  
} else if (!cache[IP].value) {                                                                                                                                                                                                 
return cache[IP].promise;                                                                                                                                                                                                  
}                                                                                                                                                                                                                              
return Promise.resolve(cache[IP].value);                                                                                                                                                                                       
}                                                                                                                                                                                                                                  

IP = "172.217.17.68"                                                                                                                                                                                                                                     
let temp = reverse(IP)                                                                                                                                                                                                                                     
temp.then(value => console.log(value))  

您可以像这样删除 DNS 调用:

function reverse(IP) {
if (!cache[IP]) {
cache[IP] = {
promise: new Promise((resolve, reject) => {
const value = cipher.encrypt(IP);
cache[IP].value = value;
resolve(value)
})
}
return cache[IP].promise
} else if (!cache[IP].value) {
return cache[IP].promise
}
return Promise.resolve(cache[IP].value)
}

但是,这将导致错误:无法在行cache[IP].value = value;上设置未定义的属性值。发生这种情况是因为在创建承诺时,在将值分配给cache之前,将立即调用承诺中的回调。因此,缓存条目实际上还没有时间创建。

不过,这是一个简单的解决方法 - 由于您的代码现在是同步的,因此实际上不需要 Promise。我们可以删除整个 Promise,只需将值应用于缓存。

function reverse(IP) {
if (!cache[IP]) {
const value = cipher.encrypt(IP);
cache[IP] = { value: value };
}
return cache[IP].value
}

请注意,此函数不再返回 Promise,因此,请使用以下命令:

IP = "172.217.17.68"                                                                                                                                                                                                                                     
let value = reverse(IP)                                                                                                                                                                                                                                     
console.log(value)

最新更新