我试图检测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
我真正想要的是在这里.我在这里错过了什么?
第一个问题,angular.forEach返回对第一个参数的引用,因此它们不会是您正在寻找的承诺
第二个问题,angular没有替代.map
如果在promises数组中保存promise,则可以执行此操作
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) });