私はnode.jsが新しく、正しく動作しないコードがいくつかあります。私は問題が非同期関数にあると思う。このコードはかなりシンプルです。いくつかのxmlを読み、変数に値を代入し、それらの変数を別のnode.jsファイルのデータベースに接続するためのプロパティとして割り当てます。問題は、変数がXMLを読み込んだ後に更新されないことです。node.jsで変数が非同期的に更新されない
ここでは、コードだ、
//set some variables
userXML = "bgdf";
passwordXML = "";
serverXML = "";
databaseXML = "";
//parse the xml
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser({explicitArray : false});
fs.readFile(__dirname + '/variables.xml', function(err, data) {
parser.parseString(data, function (err, result) {
userXML = result.variables.user;
passwordXML = result.variables.password;
serverXML = result.variables.server;
databaseXML = result.variables.database;
//What's in this variables? The right values!
console.log(userXML);
console.log(passwordXML);
console.log(serverXML);
console.log(databaseXML);
})
});
exports.dev = {
db: {
//What's in these variables? The wrong values! Values from top of file - never updated
user: userXML,
password: passwordXML,
server: "myservername.net",
database: databaseXML
}
};
私はreadFileの後.then()約束を追加しようとしたが、その後、私の他のファイルは、「DEV」は未定義であると言っています。あなたは自分のコールバックに新たに割り当てられた変数にアクセスしてコードを移動する必要が
エラーのために 'err'変数をチェックしてみましたか? – Derek
ファイルを読み込むまでに、すでにオブジェクトをエクスポートしています。すべての非同期コードを約束事に入れて適切に連鎖すれば、そのすべての終わりに、輸出などをしたいところです。そして、最終的なコールバックだけでも約束は必要ありません。 –