【发布时间】:2016-02-28 21:19:58
【问题描述】:
我有一个使用 Angular、Express、Mongo 和 Node 的学习游戏。我现在正在学习如何使用 Promise,所以我可以等到某事完成后再开始其他事。
现在,我正在尝试等到数据库显示尝试登录的用户是否已经拥有一个帐户。我已经成功了,所以如果用户不存在,.then() 将调用将创建用户的onReject 函数。
user 有一个主帐户,可以玩会话。在每个会话中,他都会收到一个新的player。如果user 存在并尝试登录并且他的player 被记录,他将收到player 返回。如果player不存在,服务器会为他创建一个。
但是,我遇到了变量logged 的问题,它表示用户是否记录了player。在函数findUser 的第二行,我创建了一个名为logged 的变量并尝试返回它,以便可以在onResolve 函数上使用。
UserModel.find(
{ username: username, password: password},
findUser ).then(
onResolve,
onReject );
承诺解决
var onResolve = function (logged) {
if (logged) {
//RETURN USER'S PLAYER
} else {
//CREATE USER'S PLAYER
}
}
承诺拒绝
var onReject = function () {
userModel.save( function (err) {
if (!err) {
//CREATE USER
//CREATE USER'S PLAYER
}
});
});
函数 findUser
var findUser = function (err, data) {
var logged = false;
var userSearched = Q.defer();
if (data.length) { //IF USER IS IN DATABASE
logged = true;
userSearched.resolve(logged);
} else {
userSearched.reject(logged);
}
return userSearched.promise;
};
如何从承诺中返回 logged 变量以在我需要的任何地方使用?
【问题讨论】:
-
您不能将
logged退回到承诺之外。相反,返回承诺并在任何你需要的地方使用它logged。 -
我正在返回 userSearched.promise。如何从那里访问记录的值?
-
查看 jfriend00 的回答
标签: javascript angularjs node.js mongoose q