我有以下代码:
var requests = $scope.grid.data
.filter(function (rowData, i) {
return !angular.equals(rowData, $scope.grid.backup[i]);
})
.map(function (rowData, i) {
var entityId = rowData[entityIdColumn];
return $http.put('/api/' + $scope.entityType + '/' + entityId, rowData);
});
如何更换:
$http.put('/api/' + $scope.entityType + '/' + entityId, rowData);
使用执行 put 的函数,对通过或失败结果进行操作,然后返回通过或失败承诺?
此外,我还使用 $q.all(requests) 来运行创建的所有函数。有没有另一种方法可以在不使用$q的情况下运行这些?
$http.put
已经返回了一个承诺。只需对结果进行链接(then(success_callback, error_callback)
)即可对成功或失败执行操作并返回链的结果。
下面是一个链式$http.put
响应的尝试,其中包含有关可能功能的一些注释:
function putEntityData(rowData) {
var promise;
promise = $http.put('/api/' + $scope.entityType + '/' + entityId, rowData)
.then(function(response) {
// Process success here
if (response.something == 'relevant') {
return response.somethingElse;
}
}, function(reason) {
// Process error here, you can correct and return a value if salvage-able
if (reason == 'correctable') {
return "Corrected Response";
} else {
// Otherwise, continue to reject the response with $q.reject()
return $q.reject(reason);
}
});
return promise;
}
var requests = $scope.grid.data
.filter(function (rowData, i) {
return !angular.equals(rowData, $scope.grid.backup[i]);
})
.map(function (rowData, i) {
var entityId = rowData[entityIdColumn];
return putEntityData(rowData);
});