我有一個使用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 );
在承諾解決
在承諾拒絕
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'退回到諾言之外。相反,返回承諾並在需要'記錄'的地方使用它。 –
我正在返回userSearched.promise。如何從那裏訪問記錄的值? – Rodmentou
查看jfriend00的回答 –