首页 > 解决方案 > angularjs - 执行 ngResource http post 请求的顺序调用函数

问题描述

这是要执行的函数和从表中获取所有条目的 http post 请求的概要。这个函数是在我的控制器中定义的。

$scope.getAllData = function (tableName) {
  var allDataResults = $resource('/getAllDataForTable', {}, {
    save: {
      method: 'POST',
      timeout: 6000
    }
  });
  allDataResults.save($scope.all_data_input, function (response) {
    //Do stuff with response
    }
  });
};

我需要为不同的表名顺序调用这个函数。我试着像这样简单地调用它两次。

$scope.getAllData(tableName1);
$scope.getAllData(tableName2);

第二个回答是正确的,但第一个是不正确的。每个响应都包含一个列表,并且第二个响应列表的大小强制在第一个响应上,导致响应不正确。如何正确链接这 2 个发布请求请求?

标签: javascriptangularjshttp-postngresource

解决方案


您需要从您的函数中返回承诺,即:

$scope.getAllData = function (tableName) {
  var allDataResults = $resource('/getAllDataForTable', {}, {
    save: {
      method: 'POST',
      timeout: 6000
    }
  });
  return allDataResults.save($scope.all_data_input, function (response) {
    //Do stuff with response
    }
  });
};

然后,您可以使用返回的 Promise 链接您的调用:

$scope.getAllData(tableName1).$promise.then(function() {
  $scope.getAllData(tableName2);
});

顺便说一句,这些$resource示例可能会帮助您更好地理解它。如果你需要管理大量的链式 promise,你应该查看$q.all


推荐阅读