新来的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)) 发布于 2020-05-11 12:26:29
您可以像这样删除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之前,将立即调用承诺中的回调。因此,缓存条目实际上还没有时间被创建。
这是一个简单的修复--因为您的代码现在是同步的,所以实际上不需要任何承诺。我们可以删除整个承诺,只需将值应用到缓存。
function reverse(IP) {
if (!cache[IP]) {
const value = cipher.encrypt(IP);
cache[IP] = { value: value };
}
return cache[IP].value
}请注意,此函数不再返回承诺,因此要使用该函数,请执行以下操作:
IP = "172.217.17.68"
let value = reverse(IP)
console.log(value)https://stackoverflow.com/questions/61727604
复制相似问题