我有一个类,它在初始化时读取LokiJS数据库并将数据库保存在一个对象中,其中一个集合对应一个名称。我想要一个单独的数组,只包含名称。我通常会使用Object.keys(obj)执行此操作,但在我的情况下返回一个空数组。 我到目前为止的代码是:
class Barbot extends EventEmitter{
constructor(HOST, PORT, ioUID, lcUID) {
super();
var self = this;
// lokijs databases
this.dbCocktails = new loki('./src/JavaScript/Cocktails.json');
this.dbBottles = new loki('./src/JavaScript/Bottles.json');
//parameters
this.cocktails = {};
this.cocktailNames = [];
async.parallel({
db1 : function(callback){
self.dbCocktails.loadDatabase({}, function(){
callback(null);
});
},
db2 : function(callback){
self.dbBottles.loadDatabase({}, function(){
callback(null);
});
}
}, function(err, results) {
// initialize some objects
self.bottles = self.dbBottles.getCollection('Flaschen');
var cocktailArray = self.dbCocktails.listCollections();
for (let i = 0; i < cocktailArray.length; i++) {
self.cocktails[cocktailArray[i].name] = self.dbCocktails.getCollection(cocktailArray[i].name);
}
self.cocktailNames = Object.keys(self.cocktails); // somehow that doesn't work here!
})
}
然后从一个普通的JS脚本导入该类,该脚本从node-webkit应用程序运行(这可能是问题吗?HTML是否有类定义问题?)。因此,当我初始化此类然后记录Barbot.cocktails
和Barbot.cocktailNames
时,cocktails
就是我所期望的,但cocktailNames
是空的。当我在一个类之外运行相同的代码时,一切都按预期工作,名称数组中充满了我的鸡尾酒名称。有人可以帮我找出问题所在吗?
编辑:这是我用来启动课程的代码:
var Bb = require('./src/JavaScript/BarbotClass');
var HOST = 'localhost',
PORT = 4223,
ioUID = "wjY",
lcUID = "vbn";
var Barbot = new Bb(HOST, PORT, ioUID, lcUID);
console.log(Barbot)
console.log(Barbot.cocktailNames); // Array[0]
第二编辑: 所以当我从这里记录Barbot对象时,一切似乎都被初始化了。但是当我尝试访问参数时,它们似乎不是正确的。例如。看起来它会访问参数的原型?我收录了控制台输出的样子。