我們必須從API中獲取一些信息,這些信息是我們在客戶端計算的哈希值,但是需要花費相當長的時間才能完成。我們還沒有能夠與角度週期同步,我們可以做的最多的是設置一個超時來計算散列,但儘管我們現在得到了散列並獲得了信息,但是這會打破角度週期,我們可以使用它。如何將工廠連接到花費太多時間的服務?
我們是角(1.0.7)相當新的,我們知道,我們失去了一些東西,在這個問題上的任何幫助將appriaceted
更新忽略了一些明顯的部分代碼,我想,請讓我知道如果不是這樣。
https://code.google.com/p/javascript-bcrypt/和依賴正確加載,所以我們創建了一個計算哈希服務(還有一兩件事,這是需要的哈希僅一次計算)
.service('hashSrv', function(SALT, $q, $timeout) {
var bcrypt, token = '', secure = '', deferred = $q.defer();
bcrypt = new bCrypt();
token = Base64.encode("Sometoken");
return {
generate: function() {
bcrypt.hashpw(token, SALT, function(hash) {
secure = hash;
});
},
getSecure: function() {
return secure;
},
getToken: function() {
return token;
},
getData: function() {
return {
'token': token,
'secure': secure
}
}
}
})
這裏是我們的工廠資源:
.factory('InfoSrv', function ($http, RESOURCE_URL, HashSrv, $timeout) {
return $timeout(function() {
$http({method: 'GET', url: 'RESOURCE_URL?token=' + HashSrv.getToken() + '&secure=' + HashSrv.getSecure()})
.success(function(response, data, status, headers, config) {
//Here we have the correct response
})
.error(function(response, data, status, headers, config) {
//Check if something bad happens
});
}, 200);
})
最後,我們試圖阿勒在我們的控制器使用它
.controller('DataCtrl',
['$scope', 'InfoSrv',
function ($scope, InfoSrv) {
$scope.user.basicInformation = $scope.getBasicInfo();
//Here we can get the info :(
}
])
什麼是計算散列的邏輯?這聽起來像一個非常快速的過程。 – zsong
我們正在使用https://code.google.com/p/javascript-bcrypt/ – raulricardo21
應該在您要調用crypt函數的地方發佈一些角碼,以便我們可以更好地幫助您。但最有可能的是你需要調用$ scope。$ apply();讓角度知道您在角度摘要週期之外計算出的任何更新。 – DerekR