API调用后的角度回调
Angular callback after API call
我有一个棱角分明的应用程序,但有时我的回调似乎在应该执行之前就执行了。我已经为我的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);
};
相关文章:
- 成功回调永远不会被JSONP请求调用
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 如何在点击超链接时调用fullcalendar回调
- 在初始函数完成之前调用回调函数
- 未为路由器应用程序调用Node.Js的回调
- 对中的函数调用进行排序是回调的唯一方法
- Node.js exec调用从不调用回调
- 如何从参数数组中调用回调
- 当我的单元测试失败时,回调被调用了两次
- 回调函数(如afterMove)不被调用
- 如何使用jQuery等待来自回调的异步调用
- FireFox webrtc createoffer,没有任何回调调用
- 如何识别函数是作为方法调用还是作为回调调用
- jquery方法不是从angular回调调用的
- 从回调调用asyncwait
- 你可以使用PhoneGap和iOS从本地代码(而不是回调)调用javascript函数吗?
- Backbone model.fetch()回调(调用setTimeout)中的作用域问题
- React.js:你用一个不可调用的回调调用了' setState '
- 从图表.js选项回调调用 TypeScript 函数
- 如何将js函数从异步调用转换为回调调用