我的问题是我不知道在哪里存储我需要在 http 请求的最终回调中访问的数据。在 jQuery 中,我只需执行以下操作
var token = $.get('/some-url', {}, someCallback);
token.oSomeObject = {data: 'some data'};
function someCallback( data, status, token ){
token.oSomeObject.data // 'some data'
}
我使用令牌来存储请求特定的数据。
现在我发现在 Angular 中实现这一点的唯一方法是将数据存储在实际配置中:
var config = {
url: '/some-url',
method: 'GET',
oSomeObject: { data: 'some data' }
};
$http(config).success(someCallback);
function someCallback( data, status, headers, config ){
config.oSomeObject.data // 'some data'
}
一方面,这会阻止您使用速记调用($http.get,$http.post),我还发现在将调用包装在特定服务模块中时,它是一种更加突兀的方式。
有没有其他方法可以做到这一点?
更新澄清
我可能只是在这里遗漏了一些简单的东西,不了解如何正确使用 Promise API,但为了确保我们在同一页面上,让我为您提供有关该问题的更多详细信息。
我有 2 个文件:1)Controller.js 2)AjaxServices.js(所有 ajax 调用都在这里定义为服务上的方法)。
AjaxServices.js 看起来像这样:
app.service('AjaxService', function( $http ){
var self = this;
this.createUser = function( oUser, fSuccessCallback ){
return $http.put('/api/user', {oUser: oUser})
.success(fSuccessCallback);
}
}
Controller.js 看起来像这样:
app.controller('MyController', function( $scope, AjaxServices ){
$scope.saveUser = function( oUser ){
var oPromise = AjaxServices.createUser( oUser, $scope.onUserSaved );
oPromise.oUser = oUser // this is how I solve it in jQuery.ajax. The oPromise
// is then sent as the token object in the onUserSaved
// callback
}
$scope.onUserSaved = function( oStatus, status, headers, config ){
oStatus.id // here is the id of the newly created user
// which I want to now hook on to the oUser local object
}
}
你将如何使用 Promise API 实现同样的目标?