Javascript 从函数返回';未分配给$scope?

Javascript 从函数返回';未分配给$scope?,javascript,angularjs,Javascript,Angularjs,这是我的控制器: $scope.mainModel = getReviews({model:mainModelArr[1]}); $scope.compareModel = getReviews({model:compareModelArr[1]}); function getReviews(data) { $http.post(url, data) .success(function(res) { formatReviews(res) }) .

这是我的控制器:

$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;
}
这些函数工作正常,记录
查看
变量,但不知何故它既没有将
查看
变量分配给
$scope.mainModel
也没有分配给
$scope.compareModel

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

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


我做错了什么?我如何修复它?

由于异步代码不允许您简单地返回值,您应该使用承诺的
然后
方法:

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);
});
如果您
return
post请求,您可以在任何地方处理它,在那里调用
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;
}

一本好书@MichaelVayvala我用了
success
not
然后
@MichaelVayvala Ops,忘了从
getReviews返回