Angular.JS等待异步请求

时间:2018-01-29 18:25:37

标签: javascript angularjs

有一家工厂

  httpFactory.factory('setRating', function($http){
        return{
            Like: function(id){
                return $http.get('http://localhost:51265/Film/Like/' + id);
            }
        }
    });

在控制器中

$scope.thisLike = function(id){
        setRating.Like(id).then((response) => {
            $('.rating-count').text(response.data);
        })
    }

这似乎很正常并且可以正常工作。 但是我对这个元素类的绑定感到困惑。 我想以这种方式使用它

<button  
                        class="fa fa-thumbs-up like" 
                        ng-click="rating=thisLike(film.FilmId);"></button>
                <div>
                    <span ng-class="{'low-rating':rating < 0}" 
                          class="rating-count">{{ rating }}</span>
                </div>
                <button  
                        class="fa fa-thumbs-down dislike" 
                        ng-click="rating=thisDisLike(film.FilmId)"></button>

即,在标记中初始化局部变量并将其分配给返回该方法的变量。 但问题是我琐碎无法回归正确的意思。

我试过了

    $scope.thisLike = function(id){
      let v = 0;
        setRating.Like(id).then((response) => {
            v = response.data;
        })
      return v;
    }

但该方法立即返回,不要等到我得到该值。 问题是如何推迟回报,直到我从承诺中得到意义。 我得到0

1 个答案:

答案 0 :(得分:1)

首先,为什么你在那里使用jQuery?没有jquery需要!

“但该方法立即返回”

这是正确的行为,您的Promise(http调用)是异步的。

所以你可能想要的是:

$scope.rating = 0
$scope.thisLike = function(id){

    setRating.Like(id).then((response) => {
        $scope.rating = response.data;
    })
}