$ q. todo se está resolviendo antes de las devoluciones
los$q.all
se resuelve antes de que alguna de sus funciones se haya resuelto.
Estoy cargando dos archivos en Azure Blob Storage usando $ .ajax (no pude hacer que $ http funcione):
function doPhotos (result, i)
{
var d = $q.defer();
var requestData = new Uint8Array($scope.files[i].postArray);
$.ajax({
url: result.photos[i].imageUri,
type: "PUT",
data: requestData,
processData: false,
beforeSend: function (xhr)
{
xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
xhr.setRequestHeader('x-ms-blob-content-type', $scope.files[i].type);
xhr.setRequestHeader('x-ms-meta-uploadvia', 'CORS Demo');
xhr.setRequestHeader('Content-Length', requestData.length);
},
success: function (data, status)
{
d.resolve(data);
},
error: function (xhr, desc, err)
{
console.log('error uploading photo ' + desc);
d.resolve(err);
}
});
return d.promise;
}
Esta es la función que configura el$q.all
y se llama en unng-click
:
$scope.createVotation = function () {
services.photoset.create($scope.model).then(function (result) {
$scope.model.id = result.id;
var doPhotosArray= [];
for (var i in result.photos) {
doPhotosArray[i] = doPhotos(result, i);
}
$q.all(doPhotosArray).then(function (data)
{
// this is being called almost immediately before the photos upload
$scope.safeApply(function ()
{
$scope.submitting = false;
$location.path('/vote/update/' + $scope.model.id);
});
});
});
}
};
html:
<button ng-click='createVotation()'>Create</button>
losq.all->then
Se está llamando incluso antes de la primeradoPhoto
Se llama resolucion. No estoy seguro de si hay algún problema con el uso del ajax de jQuery pero entiendo que$q.all
Debería esperar hasta que ambas promesas (en mi caso hay 2) se cumplan antes de entrar en suthen
.
Como un toque adicional, las fotos.son subiéndose para que funcione, es la$q.all
Eso no está esperando.