我有这样的$http.post呼叫:

$scope.calcBarCost = function(bar, SAC, fieldSpeed) {
  console.log('bar cost details', bar);
  console.log('SAC', SAC);
  console.log('FIELD SPEED', fieldSpeed);
  data = {
    SAC: SAC,
    access_token: $scope.userData.access_token,
    fieldSpeed: fieldSpeed
  };


  var barCost = 0;
  return $http.post(apiPath + 'grabFieldLabor.php', data)
  .success(function(response) {
    var fieldLabor = 1000;

    if(response.fieldLabor) {

      console.log('Grab Field Labor Response', response);

      // After we get the field labor then we can run the calculations
      fieldLabor = parseFloat(response.fieldLabor);
      console.log('FINAL FIELD LABOR', fieldLabor);
      var averageCostPerHour = num($scope.userData.averageIronWorkersCost);

      barCost = (bar.weight / (fieldLabor / 8)) * averageCostPerHour

      var gradeCost = num($scope.costFactors[bar.grade]) * bar.weight;
      var bendCost = num($scope.costFactors[bar.bend]) * bar.weight;

      // Increased Cost Considerations
      var cf = numberize($scope.costFactors);
      var increasedCostConsiderations = 0;
          increasedCostConsiderations += (percent(cf.weather) * barCost) + (percent(cf.difficultWorkspace) * barCost) + (percent(cf.materialLifting) * barCost) + (percent(cf.jobSiteInterferences) * barCost) + (percent(cf.naturalDisasters) * barCost) + (percent(cf.difficultCircumstances) * barCost);

      barCost += gradeCost + bendCost + increasedCostConsiderations;

    }

    console.log('Final Bar Cost', barCost);

    return barCost;
  });

}


我正在尝试返回在检索数据后发生的计算,但是数据没有返回。我究竟做错了什么?

最佳答案

当您返回$ http.post时,实际上是从.success或.then函数中返回一个Promise,而不是返回值。

而不是

return barCost;


...在父范围内设置barCost。

编辑:

选项1(承诺):

function doSomePromiseRequests() {
    return $http.post(...);
}

function parentFunction(){
    doSomePromiseRequests().then(success, error);
}

function success(data) {
    ....
}

function error(data) {
    ....
}


选项2(回调):

function doSomeRequest(callback) {
    $http.post(...).then(function(success){
        callback(success, null);
    }, function(error){
        callback(null, error);
    });
}

function parentFunction(){
    doSomeRequest(function(success, error){
       ...
    });
}


编辑(在您扩展问题之后):

从您的视图/控制器运行的函数:calculateBarCost。
发出$ http请求后,将在视图上更新$ scope.calcBarCost。

$scope.calculateBarCost = function(bar, SAC, fieldSpeed) {

  ...

  $http.post(apiPath + 'grabFieldLabor.php', data)
  .success(function(response) {
     ....

    $scope.calcBarCost = barCost;
  });

}

09-25 18:06
查看更多