我目前有一家工厂提交带有数据的POST请求。
这是工厂:
app.factory('Quotes', ['$http',function($http, $q) {
var urlBase = 'http://test-url.com';
var Quotes = {};
Quotes.createQuote = function (data) {
return $http.post(urlBase + '/', data)
};
return Quotes;
}]);
我有一个对象数组,每个对象需要在它自己的POST请求中单独提交。我有这个控制器..
我将$ scope.array传递给saveQuote()函数。
$scope.saveQuote = function(data){
$rootScope.loading = true;
angular.forEach(data, function(quote){
Quotes.createQuote(quote)
.success(function (data, status, headers, config) {
$rootScope.loading = false;
$rootScope.status = {header: "Success", message: "Success", type: "success"};
})
.error(function (data, status, headers, config) {
$rootScope.status = {header: "Error", message: data};
});
});
}
如何在所有帖子请求完成后创建一个函数?
更新
另外,我如何为每个POST输出每个错误响应?看来下面的答案只输出其中一个?
答案 0 :(得分:3)
使用$ q服务
$scope.saveQuote = function(data){
$rootScope.loading = true;
var createdQuotes = [];
angular.forEach(data, function(quote){
createdQuotes.push(Quotes.createQuote(quote));
});
$q.all(createdQuotes).then(function() {
//do something now that all the quotes are created
$rootScope.loading = false;
$rootScope.status = {header: "Success", message: "Success", type: "success"};
}, function(data) {
$rootScope.status = {header: "Error", message: data};
});
}
Quote.createQuote
必须返回承诺才能使其发挥作用。
更好的是,您可以将forEach
更改为map
,将第一部分缩减为一行,如下所示:
var createdQuotes = data.map(Quotes.createQuote);