필자는 백엔드 데이터에서 가져올 약속을 작성합니다. 하지만 function end()에는 내 변수 마녀가이 데이터를 포함하고 있지 않습니다. 내가 뭘 잘못하고, overlappingProjects 변수를 반환하는 방법?내 변수가 AngularJS 약속 범위 내에서 사용 가능하지 않은 이유는 무엇입니까?
Console.log (1 및 2)는 데이터가 많지만 console.log (4)에는 이미 빈 개체가 있습니다.
this.checkSingleInvitation = function(invitation) {
console.log('Оверлап сингл');
var dtoArray = [];
var overlappingProjects = {};
InvitationService.acceptedProjects.models.forEach(function(accepted) {
if(!(dateHelper.parseDate(accepted.dt_from) > dateHelper.parseDate(invitation.dt_to) || dateHelper.parseDate(accepted.dt_to) < dateHelper.parseDate(invitation.dt_from))) {
var dto = {
target: invitation.project_has_musicians_id,
goal: accepted.project_id
};
dtoArray.push(dto);
}
});
var promises = [];
angular.forEach(dtoArray, (function(dto) {
var deferred = $q.defer();
var overlappingProjects = {};
//async fun
InvitationService.checkOverlapping(dto)
.before(function() {
progressBars.progressbar.requestsInProgress++;
})
.success(function(data) {
// TODO: overlappingProjects - ???
if(Object.keys(data).length) {
console.log('1');
console.log(data);
overlappingProjects = data;
console.log(overlappingProjects);
}
console.log('2');
console.log(data);
deferred.resolve(data);
})
.error(function(error) {
deferred.reject(error);
})
.finally(function() {
progressBars.progressbar.requestsInProgress--;
});
promises.push(deferred.promise);
}));
$q.all(promises).then(console.log(promises)).then(
end()
);
function end() {
console.log('4');
console.log(overlappingProjects);
return overlappingProjects;
}
}
'Invitatio nService.checkOverlapping (dto)'를 약속 배열에 추가합니다. 그리고 '모든 것'으로 해결할 때까지 기다리십시오. – yBrodsky