函数中的 Return 未分配给 $scope?

Return from the function wasn't assigned to the $scope?

这是我的控制器:

$scope.mainModel = getReviews({model:mainModelArr[1]});
$scope.compareModel = getReviews({model:compareModelArr[1]});

function getReviews(data) {
    $http.post(url, data)
    .success(function(res) {
        formatReviews(res)
    })
    .error(function(err) {
        console.log("Something went wrong: "+err);
    });
}

function formatReviews(data) {
    var review = data[0];
    review.sumReviews = (review.sumReviews/review.ratingAvg).toFixed(0);
    review.sumRecommend = (review.sumRecommend/review.sumReviews*100).toFixed(1);
    review.ratingAvg = (review.ratingAvg).toFixed(1);
    console.log(review); // logs message fine 
    return review;
}

这些函数工作正常,logs review var.,但不知何故它既没有将 review 变量分配给 $scope.mainModel 也没有至 $scope.compareModel.

注意:我知道它没有被分配,因为它从未出现在 HTML 中:

<p>{{mainModel}}</p> 

我做错了什么,我该如何解决?

由于异步代码不允许您简单地 return 值,因此您应该使用它们的 then 方法处理承诺:

getReviews({model: mainModelArr[1]}).then(function(data) {
    $scope.mainModel = data;
});

getReviews({model: compareModelArr[1]}).then(function(data) {
    $scope.compareModel = data;
});

function getReviews(data) {
    return $http.post(url, data)
    .success(formatReviews)
    .error(function(err) {
        console.log("Something went wrong: "+err);
    });
}

Ajax 请求异步工作,angularjs 使用承诺来处理此请求

$scope.mainModel = undefined;
$scope.compareModel = undefined;

getReviews({model:mainModelArr[1]}).success(function(res){
    $scope.mainModel = formatReviews(res);
});

getReviews({model:compareModelArr[1]}).success(function(res){
    $scope.compareModel = formatReviews(res);
});

如果你returnpost请求,你可以在任何地方处理它,只要你调用getReviews方法

function getReviews(data) {
    return $http.post(url, data)
    .error(function(err) {
        console.log("Something went wrong:", err);
    });
}

function formatReviews(data) {
    var review = data[0];
    review.sumReviews = (review.sumReviews / review.ratingAvg).toFixed(0);
    review.sumRecommend = (review.sumRecommend / review.sumReviews * 100).toFixed(1);
    review.ratingAvg = (review.ratingAvg).toFixed(1);   
    console.log(review); // logs message fine 
    return review;
}