0

我有以下代码:

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 的情况下运行这些?

4

1 回答 1

0

$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);
});
于 2013-11-13T08:23:20.277 回答