API调用后的角度回调

Angular callback after API call

本文关键字:回调 调用 API      更新时间:2023-09-26

我有一个棱角分明的应用程序,但有时我的回调似乎在应该执行之前就执行了。我已经为我的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()函数在添加offer之前激发,因此它加载的数据没有新的offer。但在强制刷新后,这个提议就在那里。是否需要采取不同的做法,以便按预期进行?

问题出在loadRemoteData()中的()。无论在哪里执行,loadRemoteData()函数都将被实际执行。如果您只想将loadRemoteData函数作为成功回调传递给.then(),那么您应该简单地传递函数的名称。

将控制器代码更改为:

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