下面是我的角度控制器,但在其中,我的承诺似乎不起作用。 console.log没有显示响应,也没有显示警告。
myapp.controller('contrl6', ['$scope','$q','$localStorage','$http',
function ($scope,$q,$localStorage,$http) {
$scope.myXhr = function(){
var q = $q.defer();
$http({
method: 'GET',
url: '/api/session_data'
})
.success(function(response){
console.log(response);
q.resolve('request successful');
})
.error(function(response){
console.log("error");
q.reject('ERROR');
});
return q.promise;
}
console.log("hi");
var myPromise = $scope.myXhr();
myPromise.then(function(resolve){
alert(resolve);
console.log(resolve);
}, function(reject){
alert(reject);
console.log(reject);
});
}]);
答案 0 :(得分:2)
在myxhr
内,没有任何内容与$http
的结果连接在一起。不要担心创建新的承诺,因为$http
已经返回一个承诺:
$scope.myXhr = function(){
return $http({
method: 'GET',
url: '/api/session_data'
})
.then(function(response){
return response;
})
.catch(function(response){
throw new Error('ERROR');
});
}
答案 1 :(得分:2)
弃用通知
已弃用
$http
遗留承诺方法.success
和.error
。请改用标准.then
方法。 1
$scope.myXhrPromise = function(){
return (
$http({
method: 'GET',
url: '/api/session_data'
}).then (function onFulfilled (response) {
console.log(response.data);
//return data for chaining
return response.data;
}).catch (function onRejected (response) {
console.log(response.status);
//throw to chain rejection
throw response;
})
);
};
答案 2 :(得分:0)
我将您的代码复制/粘贴到Plunkr中,一旦我正确连接它就可以正常工作。
正如Duncan所说,请确保使用ng-app和ng-controller正确连接。如果您可以使用您正在使用的HTML标记更新您的问题,我们可以提供更多帮助。