我有一个有角度的应用程序,但有时我的回调似乎在应该之前执行。我为我的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()函数在添加商品之前触发,因此它在没有新商品的情况下加载数据。但随后强制刷新提供的是那里。有什么需要以不同的方式完成,以便这可以按预期工作吗?
答案 0 :(得分:2)
问题在于()
中的loadRemoteData()
。无论您在何处执行此操作,loadRemoteData()
功能都将实际执行。如果您只想将loadRemoteData
函数作为成功回调传递给.then()
,那么您应该只传递函数的名称。
将您的控制器代码更改为:
$scope.addOffer = function(){
campaignService.addOffer($scope.id).then(loadRemoteData);
};