Javascript 拒绝$http成功承诺
我有一个函数,它返回$HTTPGET的承诺(承诺成功/错误由调用程序处理)。我需要的是,给定某些条件,即使$http成功,也要返回一个错误(调用程序会将此条件捕获为拒绝的承诺) 在这个例子中,我试图返回$q.reject(),但这不起作用 这是JavaScript:Javascript 拒绝$http成功承诺,javascript,angularjs,Javascript,Angularjs,我有一个函数,它返回$HTTPGET的承诺(承诺成功/错误由调用程序处理)。我需要的是,给定某些条件,即使$http成功,也要返回一个错误(调用程序会将此条件捕获为拒绝的承诺) 在这个例子中,我试图返回$q.reject(),但这不起作用 这是JavaScript: app.controller("ctrl", function($scope, $http) { var getUrl = function() { var config = { method: 'GET'
app.controller("ctrl", function($scope, $http) {
var getUrl = function() {
var config = {
method: 'GET',
url: 'some.txt'
};
var x = 1; // if x == 1 the http should fail
return $http(config).success(function(response, status, headers, config) {
console.log(response);
if (x == 1) return $q.reject('error');
}).error(function(data, status, headers, config) {});
};
var init = function() {
var promise = getUrl();
promise.then(function() {
alert('OK');
}, function() {
alert('error');
});
};
init();
});
有什么想法吗?$http.success()
和error()
都是方便快捷方式,它们并不是100%符合承诺的。使用香草承诺然后改为:
$http(config).then(function(response){return $q.reject}, function onError(reason){})
试试这个:
您返回自己的延迟承诺,并可随意决定/拒绝
var defer = $q.defer();
$http(config)
.success(function (response, status, headers, config) {
console.log(response);
if (x == 1)
defer.reject('error');
else
defer.resolve(response);
})
.error(function (data, status, headers, config) {
});
return defer.promise;
这不是延迟反模式吗?我试图避免它。您试图更改内部deffered的resolve/reject行为,因此我认为没有任何方法可以解决它。@Variant IMHO我认为这应该是公认的答案,您确实用angular标记了该问题。否则,可能需要编辑标记。