2015-12-01 22 views
0

我使用$ q和承诺有麻烦。
我这样做:

for (var i = 0; i<$scope.products.length; i++){ 
    var product = $scope.products[i]; 
    promises.push(Sale.save(product,function(result){ 
     $scope.listOfProducts.push(result); 
    })); 
} 
$q.all(promises).then(function() {  
     echo('done'); 
    }); 
}); 

我的问题是,回声(“完成”)所有Sale.save完成之前被调用。 我不知道为什么。

如果有人知道...
谢谢

+0

如果'Sale'是'$ resource',则承诺通过可用'返回对象的$ promise'属性:'promises.push(Sale.save(...)。$ promise)'。 – sp00m

+0

你可以分享'save'的代码吗? –

+0

保存是调用java控制器的资源 – user1260928

回答

1

我假设Sale是一种资源,如果是这样的话,你需要有点不同处理的承诺。

尝试这种情况:

for (var i = 0; i<$scope.products.length; i++){ 
    var product = $scope.products[i]; 
    promises.push(Sale.save(product).$promise.then(function(result){ 
     $scope.listOfProducts.push(result); 
     return result; 
    })); 
} 
$q.all(promises).then(function(results) {  
     echo('done'); 
    }); 
}); 
+0

添加.then时出现错误:TypeError:undefined不是'then'上的函数。销售是一种资源。 – user1260928

+0

你可以添加'Sale'的代码吗?它是'$资源'吗? –

+0

我的不好,我刚刚意识到我错过了'$ promise'。现在就试试。 –

0

Here is使用$timeout来模拟每个功能过程中的延迟一个粗略的例子。

你应该尝试,以推动功能到承诺队列独立滚动圆返回每个值:

promises.push($scope.testFuncToResolve(i).then(function (result) { 
    //extra stuff here 
    return result; 
}));