之前我使用AngularJS,UI路由器和$資源REST風格的Web服務。
在HTML視圖的按鈕被點擊調用下面函數即$ scope.login()。因此REST服務(通過$資源)被調用,並在情況下,用戶會返回一個用戶名/密碼是正確的,
$scope.login = function() {
myfactory.get({
email: $scope.user.email,
password: $scope.user.password
},function(user) {
accessmgr.grantAccess(user); //Line of interest - loi1
$state.go('app.dashboard-v1'); //Line of interest2 - loi2
}, function(x) {
if (x.status == 401)
$scope.authError = 'Email or Password not right';
else
$scope.authError = 'Server Error! Are you connected to internet?';
});
}
萬一
以上的成功執行,另一家工廠的功能(loi1以上)被調用,以存儲用戶的實例中$ localStorage如下;
myapp.factory('accessmgr', function($localStorage) {
//var User = {};
return {grantAccess: function(usr) {
$localStorage.user = usr;
}
}});
和ui-router $ scope.go(...)將用戶帶到儀表板。
問題: 有時 $ state.go(...)accessmgr.grantAccess之前執行(...)導致異常作爲新的國家從還沒寫$的localStorage讀取用戶。手動重新加載頁面可以解決問題。
任何幫助將非常感激。
等待承諾從''grantAccess''然後執行$ state.go像返回''accessmgr.grantAccess(用戶)。然後(功能(響應){$ state.go( 'app.dashboard-V1'); })'' –
我認爲promise/then僅適用於$ http或$ resource之類的回調?在我的情況下,它只是另一個功能將用戶保存到$ localStorage。無論如何,我嘗試過,但報道對鉻'類型錯誤的控制檯錯誤:無法爲$ promise.then'讀undefined'的屬性「然後」與同類型錯誤:無法讀取性能undefined' – hammad
承諾的「$承諾」可以用來與任何異步服務,只要服務是基於承諾(和$ localStorage不是)。 – estus