Ich benutze ES6, um von Node.js App-Klasse zu erstellen. Ich möchte eine db-Klasse erstellen, also tat ich folgendes:Node.js ES6-Klasse privater Speicher
"use strict"
var ini = require('node-ini');
var mysql = require('mysql');
let _db = new WeakMap();
// Class de base pour la base de donnée
class Db{
constructor() {
ini.parse('../config/settings.ini', function(err,data){
if(err) {
console.log(err);
return;
} else {
_db.set(this, mysql.createConnection({
host : data.database_MYSQL.host,
user : data.database_MYSQL.username,
password : data.database_MYSQL.password,
database : data.database_MYSQL.schema
}));
}
});
}
}
module.exports = Db;
Es ist das erste Ich versuche, eine private Variable zu speichern, und ich sah, die im Internet nach Lösungen. Ich habe die Weakmap-Lösung gefunden, die ich implementiert habe. Aber die MySQL-Verbindung speichert es nicht mit dem folgenden Quellcode. Ich habe diese Ausgabe:
_db.set(this, mysql.createConnection({
^
TypeError: Invalid value used as weak map key
at WeakMap.set (native)
at D:\supervision\application\class\db.js:15:21
at D:\supervision\application\node_modules\node-ini\node-ini.js:168:12
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)
So, wie man damit umgehen?
EDIT:
Hier ist, wie Anrufer wissen, wann es initialisiert ist:
var db;
function instantiateDb(callback){
db = new db_connector();
callback(db);
}
instantiateDb(function(db){
db.connectDatabase();
})
'verwendet this' ist innerhalb des Callbacks nicht definiert. Weitere Informationen finden Sie unter [So greifen Sie auf das richtige 'This' innerhalb eines Callbacks zu?] (Https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback) für eine Lösung . Der Gesamtansatz erscheint jedoch fragwürdig. Angenommen, dass "Parse" asynchron ist, wie weiß der Anrufer dann, wenn die Initialisierung abgeschlossen ist? –
Der Anrufer weiß es Ich habe versucht, Versprechen ohne Erfolg umzusetzen, also verwende ich Callback-Funktion, wie in der Bearbeitung –
Und im Moment der Callback aufgerufen wird, ist "ini.parse" * noch * nicht getan. Sie übergeben grundsätzlich ein unvollständiges Objekt an den Rückruf. –