我试图检测foreach语句是否与foreach中的语句一起完成。根据我的研究,许多人都要求使用承诺。当我实现它时,它没有按照我期望的方式执行。
var uploadUrl = "/api/upload";
$('#add_product').closeModal();
var promises = angular.forEach(vm.images_selected, function(value , key){
return File_Upload.uploadFileToUrl(value, uploadUrl)
.success(function(result){
vm.images_selected_uploaded.push(result);
console.log('here')
});
})
$q.all(promises).then(function () {
console.log('there')
console.log(vm.images_selected_uploaded)
})
从上面的代码(让我们说值长度为2,输出将是
there
here
here
我真正想要的是这里。我在这里缺少什么?
答案 0 :(得分:6)
第一个问题,angular.forEach返回对第一个参数的引用,因此它们不会是您正在寻找的承诺
第二个问题,角度没有替代.map
如果在promises数组中保存promises,则可以执行此操作
var uploadUrl = "/api/upload";
$('#add_product').closeModal();
var promises = [];
angular.forEach(vm.images_selected, function(value , key){
promises.push(File_Upload.uploadFileToUrl(value, uploadUrl)
.success(function(result){
vm.images_selected_uploaded.push(result);
console.log('here')
})
);
})
$q.all(promises).then(function () {
console.log('there')
console.log(vm.images_selected_uploaded)
});
答案 1 :(得分:2)
这样的事情:
var uploadUrl = "/api/upload";
$('#add_product').closeModal();
var promises = [];
angular.forEach(vm.images_selected, function(value , key){
promises.push(File_Upload.uploadFileToUrl(value, uploadUrl));
});
$q.all(promises).then(function (results) {
for(var i = 0; i < results.length; i++){
var result = results[i];
vm.images_selected_uploaded.push(result);
console.log('here');
}
console.log('there');
console.log(vm.images_selected_uploaded);
})
或许这样:
var uploadUrl = "/api/upload";
$('#add_product').closeModal();
var promises = [];
angular.forEach(vm.images_selected, function(value , key){
var promise = File_Upload.uploadFileToUrl(value, uploadUrl);
promise.success(function(result){
vm.images_selected_uploaded.push(result);
console.log('here');
});
promises.push(promise);
})
$q.all(promises).then(function () {
console.log('there');
console.log(vm.images_selected_uploaded);
})
两者都是未经测试的顺便说一句。