我創建了一個接收用戶憑據並檢查是否可以登錄用戶的功能。 我的函數返回一個承諾,當給出正確的憑證或者被拒絕時應該解決。檢查基於承諾的登錄功能中的所有可能的錯誤
login: function(credentials){
var dfd = $q.defer();
if(!credentials) dfd.reject('No user credentials given');
else if(!credentials.name || !credentials.name.length) dfd.reject('No username given');
else if(!credentials.password || !credentials.password.length) dfd.reject('No password given');
else if(!self.database.hasOwnProperty(credentials.name)) dfd.reject('Unknown user');
else if(credentials.password == self.database[credentials.name].password){
dfd.resolve(true);
}
else{
dfd.reject('Wrong password');
}
return dfd.promise;
},
雖然我的代碼工作,我發現很難閱讀和混亂。
我有2個問題:
我怎麼可以這樣寫一個更清潔的方式?
例如,如果沒有輸入名稱,我可以停止執行代碼的其餘部分:
編輯:
一種新的方法:
login: function(credentials){
var dfd = $q.defer();
var self = this;
if(!credentials){
dfd.reject('No user credentials given');
} else if(!credentials.name || !credentials.name.length){
dfd.reject('No username given');
} else if(!credentials.password || !credentials.password.length){
dfd.reject('No password given');
} else if(!self.database.hasOwnProperty(credentials.name)){
dfd.reject('Unknown user');
} else if(credentials.password == self.database[credentials.name].password){
self.name = sessionStorage.name = credentials.name;
self.email = sessionStorage.email = self.database[credentials.name].email;
if(credentials.remember){
localStorage.name = credentials.name;
localStorage.email = self.database[credentials.name].email;
}
dfd.resolve(true);
} else{
dfd.reject('Wrong password');
}
return dfd.promise;
個人而言,我發現代碼不必要難以閱讀,因爲一)風格並不一致和b)不使用括號和無處不在的新線。 – Jon
@Jon, 謝謝。我增加了另一種方法,你會說這個更好嗎? – user2422960
我認爲這比較好,但是我個人會在條件之外移動「如果一切正常」部分。用if/else檢查故障條件,然後單獨檢查if(!dfd.isRejected()),然後將代碼移到那裏。對我來說,這是更好的邏輯分離。另外,這個問題可能應該轉移到Code Review。 – Jon