我有这样的$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;
});
}