(使用Node.js) 嗨,我有一个用户(用户类)的数组,当我用console.log打印数组时,它正确显示内容并显示它的长度是3,但是当我尝试从数组中获取任何东西时,它返回 undefined ,对于* .length,它返回0.问题出在哪里?
exports.users = [];
exports.loadUsers = (callback) => {
let more = true;
let i = 0;
while(more) {
let us = _usersFolder + "us_" + i + "/";
if(fs.existsSync(us)) {
fs.readFile(path.join(us + "personal.json"), (err, data) => {
if(err) {
console.log("failed to load file!");
return;
}
let json_personal = JSON.parse(data);
this.users.push(new User(json_personal));
});
i++;
} else {
more = false;
}
}
callback();
}
exports.getUserById = (id) => {
console.log(this.users);
console.log("length: " + this.users.length);
console.log(this.users[0]);
for(let i = 0; i < this.users.length; i++) {
let u = this.users[i];
console.log(u.id);
if(u.id === id) {
return u;
}
}
return false;
}
在回调中调用getUserById,因此用户已经加载。
答案 0 :(得分:0)
这取决于您使用'this'对象的位置。 'this'可能会引用与您存储数组的对象不同的对象('this'根据您使用它的范围而变化)。
我需要更多信息来帮助你。
答案 1 :(得分:0)
var users=[{"num":1},{"num":2},{"num":3}];
console.log(this.users);
console.log("length: " + this.users.length);
console.log(this.users[0]);
输出
(3)[对象,对象,对象]
长度:3
对象{a:1}
答案 2 :(得分:-1)
我希望您在控制台中打印后进行定义。
var users = [];
console.log(users);
console.log("length: " + users.length);
console.log(users[0]);
users.push(1);
users.push(2);
users.push(3);
&#13;
console.log()
的输出具有误导性;当你记录那个时间没有任何价值。之后它被添加了。它打印对象的引用,而不是状态值。所以你会一直看到当前的状态值。