Angular.foreach异步回调不起作用

时间:2015-12-09 09:21:00

标签: javascript angularjs foreach promise

我试图检测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

我真正想要的是这里。我在这里缺少什么?

2 个答案:

答案 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);
})

两者都是未经测试的顺便说一句。

相关问题