У меня есть обучающая игра с использованием Angular, Express, Mongo и Node. Теперь я изучаю, как использовать обещания, поэтому я могу подождать, пока что-то не закончится, прежде чем начинать что-то еще.Как вернуть переменную из обещания Q-узла?
Прямо сейчас, я пытаюсь подождать, пока база данных не сообщит, что пользователь, пытающийся войти в систему, уже имеет учетную запись. Мне это удалось, поэтому, если пользователь не существует, .then()
вызовет функцию onReject
, которая создаст пользователя.
user
имеет основную учетную запись и может воспроизводить сеансы. В течение каждой сессии он получит новый player
. Если user
существует и пытается войти в систему, а его player
будет зарегистрирован, он получит это player
назад. Если player
не существует, сервер создаст его для него.
Но у меня возникла проблема с переменной logged
, в которой говорится, что пользователь зарегистрировал player
. Во второй строке функции findUser
я создаю переменную с именем logged
, и я пытаюсь ее вернуть, поэтому могу использовать функцию onResolve
.
UserModel.find(
{ username: username, password: password},
findUser).then(
onResolve,
onReject );
На Promise разрешения
На Promise отклонять
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. Как мне получить доступ к зарегистрированному значению? – Rodmentou
см. Ответ jfriend00 –