首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JS代码中删除dns依赖项

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

Stack Overflow用户
提问于 2020-05-11 10:32:58
回答 1查看 50关注 0票数 0

新来的JS,找到了一些示例代码,并对其进行了修改,以适应我的目的1。它工作得很好,但是*dns.reverse(IP,(err) *)与我的代码完全无关。基本上,我根本不需要dns模块。我试着把它移除几种方法,但都没有用。每次密码崩溃的时候。想法,一个人如何才能删除这个不必要的部分?

事先非常感谢,

1

代码语言:javascript
复制
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))  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 12:26:29

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

代码语言:javascript
复制
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之前,将立即调用承诺中的回调。因此,缓存条目实际上还没有时间被创建。

这是一个简单的修复--因为您的代码现在是同步的,所以实际上不需要任何承诺。我们可以删除整个承诺,只需将值应用到缓存。

代码语言:javascript
复制
function reverse(IP) {
    if (!cache[IP]) {
        const value = cipher.encrypt(IP);
        cache[IP] = { value: value };
    }
    return cache[IP].value
}

请注意,此函数不再返回承诺,因此要使用该函数,请执行以下操作:

代码语言:javascript
复制
IP = "172.217.17.68"                                                                                                                                                                                                                                     
let value = reverse(IP)                                                                                                                                                                                                                                     
console.log(value)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61727604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档