Herkes bana bazı Angular sözleriyle yardım edebilir mi? Bir dizi dosya nesnesinde alması, üzerine yineleme yapması ve her birini yüklemesi gereken aşağıdaki işlevleri kullanıyorum. Her yineleme sırasında, bir söz nesnesi promises
dizisine itilir. Benim upload
işlev içinde .then()
eklenmiş bir cycle
işlevi var, tüm söz nesneleri çözülünceye kadar çağrılmamalıdır. Sanırım kodum doğru görünüyor, ama doğru çalışmıyor. Resimler yüklenir, ancak dizisi, promises
dizisinin çözülmesinden hemen sonra çağrılır.AngularJS Vaatler Dizisi
function upload(files) {
var uploadCount = files.length;
function cycle(files) {
var promises = [];
for (var i = 0; i < files.length; i++) {
var deferred = $q.defer();
promises.push(deferred);
var file = files[i];
Upload.upload({
url: '/photos.json',
file: file
}).success(function(){
$scope.progressCurrentCount += 1;
deferred.resolve();
});
};
return $q.all(promises);
};
cycle(files).then(function(result) {
if(uploadCount > 1) {
$scope.lastAction = 'uploaded ' + uploadCount + ' photos';
} else {
$scope.lastAction = 'uploaded ' + uploadCount + ' photo';
}
$scope.showSuccessModal = true;
$scope.uploading = false;
$scope.failedUploads = [];
$scope.newPhotos = {
token: $scope.token,
files: undefined
};
photoUploadBtn.removeClass('disabled');
})
};
Final çalışma kodu *
yerine var deferred = $q.defer();
promises
diziye deferred.promise
iterek ve sonra çalışma değildi benim .success()
callback'inde, içinde deferred
çözme ayarı, sadece olmadan benim Upload.upload()
fonksiyonunu itmek .success()
, promises
'a geri dönün ve sonra tüm kaldırma işlemini yapan $q.all()
numarasına iletin.
function upload(files) {
var uploadCount = files.length;
function cycle(files) {
var promises = [];
for (var i = 0; i < files.length; i++) {
var file = files[i];
var promise = Upload.upload({
url: '/photos.json',
file: file
});
promises.push(promise);
};
return $q.all(promises);
};
cycle(files).then(function(result) {
if(uploadCount > 1) {
$scope.lastAction = 'uploaded ' + uploadCount + ' photos';
} else {
$scope.lastAction = 'uploaded ' + uploadCount + ' photo';
};
$scope.showSuccessModal = true;
$scope.uploading = false;
$scope.failedUploads = [];
$scope.newPhotos = {
token: $scope.token,
files: undefined
};
photoUploadBtn.removeClass('disabled');
getPhotos(q);
})
};
Teşekkürler, ihtiyacım olan çözümün çoğu buydu! Ayrıca bu makaleye (https://www.jonathanfielding.com/combining-promises-angular/) da rastladım. Bu da beni biraz farklı bir şekilde ele almam gerektiğini fark etti. Son kodumu yukarıdaki yazıya koyacağım. – ACIDSTEALTH