5
나는 선택한 파일을 반복하고 서버 파일 시스템에 추가하는 업로드 기능이 있습니다. 내 컨트롤러에서비동기 루프 기능에서 각도 약속
업로드 공장
app.factory('uploadFactory', function ($upload, $q) {
var uploadFactory = {};
var image = {
Models: [],
Images: [],
uploadImages: function() {
var defer = $q.defer();
for (var i = 0; i < this.Models.length; i++) {
var $file = this.Models[i].file;
(function (index) {
$upload
.upload({
url: "/api/upload/",
method: "POST",
file: $file
})
.success(function (data, result) {
// Add returned file data to model
var imageObject = {
Path: data.Path,
Description: image.Models[index].Description,
Photographer: image.Models[index].Photographer
};
image.Images.push(imageObject);
defer.resolve(result);
});
})(i);
}
return defer.promise;
}
};
uploadFactory.image = function() {
return image;
};
return uploadFactory;
});
는
$scope.imageUpload = new uploadFactory.image;
$scope.create = function() {
var uploadImages = $scope.imageUpload.uploadImages();
uploadImages.then(function()
$scope.ship.Images = $scope.imageUpload.Images;
shipFactory.create($scope.ship).success(successPostCallback).error(errorCallback);
});
};
내 문제는 약속 만 루프를 통해 처음 업로드에 대한 약속을 보유하고 있다는 점이다. $q.all()
에 대한 내용을 읽었지만 작동하도록 구현하는 방법을 잘 모르겠습니다.
어떻게 전체 루프를 유지할 수 있습니까? 감사!
솔루션
var image = {
Models: [],
Images: [],
uploadImages: function() {
for (var i = 0; i < this.Models.length; i++) {
var $file = this.Models[i].file;
var defer = $q.defer();
(function (index) {
var promise = $upload
.upload({
url: "/api/upload/",
method: "POST",
file: $file
})
.success(function (data, result) {
// Add returned file data to model
var imageObject = {
Path: data.Path,
Description: image.Models[index].Description,
Photographer: image.Models[index].Photographer
};
image.Images.push(imageObject);
defer.resolve(result);
});
promises.push(promise);
})(i);
}
return $q.all(promises);
}
};
이렇게하면 모든 이미지가 업로드되지만 위의 컨트롤러 코드를 볼 수 있습니다. 'uploadImages' 함수가 실행되지만'.then (function() {'안의 코드는 멈추지 않습니다.) 'uploadImages'가 올바르게 리턴합니까? – Lars
업로드가 실패 할 수도 있습니다 ? $ upload.upload 약속에 .error 콜백을 추가하고 볼 수 있습니다. – jlb
아니요, 이미 콜백 오류가 있습니다.이 질문의 코드를 추가하지 않아서 쉽게 읽을 수 없습니다. 내 모든 업로드는 다음과 같습니다. 유효하고 성공한 것 – Lars