API调用后的Angular回调

时间:2014-10-15 16:45:40

标签: javascript php angularjs

我有一个有角度的应用程序,但有时我的回调似乎在应该之前执行。我为我的api调用定义了一个服务,它的方法看起来像这样。

    function addOffer(id) {
        var request = $http({
            method: "get",
            url: "/api/campaign/offers",
            params: {
                action: "add",
                id: id
            }
        });
        return ( request.then(handleSuccess, handleError) );
    }
    function handleError(response) {

        // The API response from the server should be returned in a
        // nomralized format. However, if the request was not handled by the
        // server (or what not handles properly - ex. server error), then we
        // may have to normalize it on our end, as best we can.
        if (
            !angular.isObject(response.data) || !response.data.message
        ) {

            return ( $q.reject("An unknown error occurred.") );

        }

        // Otherwise, use expected error message.
        return ( $q.reject(response.data.message) );

    }

    function handleSuccess(response) {
        return ( response.data );

    }

然后在我的控制器中,我有像这样定义的范围函数

$scope.addOffer = function(){
    campaignService.addOffer($scope.id).then(
        loadRemoteData()
    );
};

加载远程数据功能将客户端与存储在应用程序后端的内容同步。

我的问题是在控制器方法addOffer中,loadRemoteData()函数在添加商品之前触发,因此它在没有新商品的情况下加载数据。但随后强制刷新提供的是那里。有什么需要以不同的方式完成,以便这可以按预期工作吗?

1 个答案:

答案 0 :(得分:2)

问题在于()中的loadRemoteData()。无论您在何处执行此操作,loadRemoteData()功能都将实际执行。如果您只想将loadRemoteData函数作为成功回调传递给.then(),那么您应该只传递函数的名称。

将您的控制器代码更改为:

$scope.addOffer = function(){
    campaignService.addOffer($scope.id).then(loadRemoteData);
};