我有一个对象,我需要从同一个对象内的另一个方法调用它的方法。我正在使用ES6语法:
var user = {
login(name, password) {
return new Promise(function(resolve, reject) {
console.log('ready to find');
var args = {
'name': 'users',
'query': {
'name': name
},
'options': {
'_id': 1,
'name': 1,
'password': 1
}
};
db.find(args).toArray().then(function(result) {
var auth = {};
if(result[0] && result[0].password == password) {
console.log('user ok');
auth = {
ok: 1,
userID: result[0]._id,
user: result[0].name
};
} else {
console.log('user wrong');
auth = {
ok: -1,
errmsg: 'password wrong'
};
}
resolve(auth);
})
.catch(function(err) {
reject(err);
});
});
},
find(userID) {
console.log("USER: find");
return new Promise(function(resolve, reject) {
var args = {
'name': 'users',
'query': {
'_id': userID
},
'options': {
'name': 1
}
};
db.find(args).toArray().then(function(result) {
var findResult = {};
if(result[0]) {
findResult.ok = 1;
findResult.user = result[0].name;
} else {
findResult.ok = -1;
findResult.errmsg = 'not found';
}
return findResult;
})
.catch(function(err) {
throw err;
});
});
},
authenticate(session) {
return new Promise(function(resolve, reject) {
console.log("USER: authenticate");
if(session.cookie && session.userID && session.user) {
var _expires = session.cookie._expires;
var userID = session.userID;
var user = session.user;
if(new Date(_expires) > new Date(Date.now())) {
console.log("USER: session isn't expired");
console.log(userID);
user.find(userID);
}
}
});
},
};
我可以在外面拨打user.find()
,但无法从user.anthenticate()
拨打电话。 console.log("USER: session isn't expired");
和console.log(userID);
效果很好,但console.log("USER: find");
没有
答案 0 :(得分:0)
您的陈述
var user = session.user;
引入了第二个user
变量,该变量使用find
方法隐藏了该变量。只要省略它,你就不需要它。
var user = {
login(name, password) {
console.log('ready to find');
return db.find({
'name': 'users',
'query': {'name': name},
'options': {'_id': 1, 'name': 1, 'password': 1}
}).toArray().then(function(result) {
var auth = {};
if(result[0] && result[0].password == password) {
console.log('user ok');
return {ok: 1, userID: result[0]._id, user: result[0].name};
} else {
console.log('user wrong');
return {ok: -1, errmsg: 'password wrong'};
}
});
},
find(userID) {
console.log("USER: find");
db.find({
'name': 'users',
'query': {'_id': userID},
'options': {'name': 1}
}).toArray().then(function(result) {
var findResult = {};
if(result[0]) {
return {ok: 1, user: result[0].name};
} else {
return {ok: -1, errmsg: 'not found'};
}
});
},
authenticate(session) {
console.log("USER: authenticate");
if(session.cookie && session.userID && session.user) {
var _expires = session.cookie._expires;
var userID = session.userID;
if(new Date(_expires) > new Date(Date.now())) {
console.log("USER: session isn't expired");
console.log(userID);
return user.find(userID);
}
}
});
}