$q.all
在其任一功能解決之前即已解決。
我上傳兩個文件使用$阿賈克斯天藍Blob存儲(我不能得到$ HTTP工作):
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;
}
這是樹立$q.all
功能和被稱爲在ng-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>
的在調用第一個doPhoto
解析之前正在調用q.all->then
。我不確定使用jQuery的ajax是否存在一些問題,但我的理解是$q.all
應該等到兩個承諾(在我的情況下有2個承諾)在進入then
之前完成。
作爲一個補充捻,照片是被上傳,所以這是工作,它是$q.all
不等待。
應該可以正常工作。看到這個演示增加了1/2秒的延遲來解決4個請求。 http://plnkr.co/edit/Zawd6dBZh6FlRPD0gsrV?p=preview – charlietfl
看看這個plunker:http://plnkr.co/edit/XpGMfak4hzTKic8R3wdR?p=preview q.all永遠不會解決,雖然這兩個函數都做。儘管與我原來的問題不同的問題不能確定它爲什麼會這樣做。我試了一下,沒有超時模擬幾秒鐘。 – lucuma
很奇怪......和我的演示幾乎是一樣的概念....看不出爲什麼它不會觸發 – charlietfl