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()
対象の が存在する場合は定期的に検索しfile.key
、次の呼び出しまで待ってその内容を処理するということです。SO は、console.log()
が読み取られた直後に使用されることを意図していませんがfile.key
、次回checkAccess()
は呼び出され、その後に呼び出されます。そのためconsole.log()
、 はコールバック内に配置されません。