원할 때 Angular가 약속 한대로 해결할 수 있습니다. 아래 코드를 볼 때, 먼저 KeyDataFromServer()를 검색하고 모든 키가 서버에서로드 된 후에 만 나머지 명령을 실행하려고합니다. 그러나 아래의 설정으로 먼저 다른 명령이 실행되어 내보기에 표시되고 서버에서 데이터가로드되면 서버 데이터가 포함됩니다.원할 때 각도 약속이 해결되지 않습니다.
내가 뭘 잘못하고 있니?
// 컨트롤러 (주입 $ q를하고 KeyGenerationService)
$scope.KeyData = null;
var defer = $q.defer();
var promise = defer.promise;
promise
.then(
function() {
var KeyData = {
Server: KeyGenerationService.getKeyDataFromServer()
};
return KeyData
})
.then(
function(KeyDataFromFunction1) {
var KeyData = {
KeyDateGroup: KeyGenerationService.generateKeyDateGroup(),
KeyID: KeyGenerationService.generateKeyID(),
Server: KeyDataFromFunction1.Server
};
return KeyData
})
.then(
function(KeyDataFromFunction2){
$scope.KeyData = KeyDataFromFunction2;
})
.catch(
function(error){
window.alert(error);
})
defer.resolve($scope.KeyData)
// 공장
.factory('KeyGenerationService', function($q, fbutil) {
// returns
return {
generateKeyDateGroup: function() {
var today = new Date();
var d = today;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd='0'+dd
}
if(mm<10) {
mm='0'+mm
}
today = yyyy+''+mm+''+ dd;
return today;
},
generateKeyID: function() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
}
getKeyDataFromServer: function() {
return fbutil.syncArray('keys');
}
} // return
}) // .factory KeyGenerationService
할 수 있습니다를 셋업 plunker 관련 데이터가있는 경우 – harishr
'var defer = $ q.defer(); var promise = defer.promise; 약속..then ('약속의 작동 방식이 아닙니다. 예를 들어 URL은 어디에 있습니까? 요청 가져 오기/받기? 문서 일부를 읽어 보는 것이 좋습니다. –
fbutil.syncArray ('keys'); get/post 요청, 그래서 getKeyDataFromServer 함수. 나는 egghead.io의 튜토리얼을 보았다. – AMG