我在 Node.js 中有下一个对象:
function myObject(){
this.allowed = false;
this.rawData;
}
myObject.prototype.checkAccess = function(){
var self = this;
if (!this.allowed){
fs.readFile("./file.key", function(err, data){
if (err) return;
self.rawData = data;
self.allowed = true;
})
return;
}
// several operations with rawData
// not intended to be called when file.key is read
// but next time checkAccess is called, by example
console.log(this.rawData);
// or, by example, use its content to decrypt
// another file or data from a socket...
var isCorrectlyDecrypted = this.decrypt(this.rawData);
if (!isCorrectlyDecrypted) this.allowed = false;
}
我定期使用 setInterval 调用 checkAccess,但我发现,现有的 file.key,我从未更新 rawData 属性,始终未定义,而允许属性更新成功。
请有人解释发生了什么并告诉我我做错了什么以及最好的方法是什么?
编辑:
因此,正如我所说,在使用此类的代码中,我有:
var myObjectInstance = new myObject();
setInterval(function(){
// here some previous code
myObjectInstance.checkAccess();
// and here more code
}, 25)
要做checkAccess()
的是定期查找 afile.key
以读取(如果存在),然后等到下一次调用以处理其内容。所以,console.log()
不打算在阅读后立即使用,file.key
而是在下一次checkAccess()
被调用并随后调用。这就是为什么console.log()
没有放在回调中的原因。