如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺



我有以下代码:

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

最新更新