Javascript 拒绝$http成功承诺

Javascript 拒绝$http成功承诺,javascript,angularjs,Javascript,Angularjs,我有一个函数,它返回$HTTPGET的承诺(承诺成功/错误由调用程序处理)。我需要的是,给定某些条件,即使$http成功,也要返回一个错误(调用程序会将此条件捕获为拒绝的承诺) 在这个例子中,我试图返回$q.reject(),但这不起作用 这是JavaScript: app.controller("ctrl", function($scope, $http) { var getUrl = function() { var config = { method: 'GET'

我有一个函数,它返回$HTTPGET的承诺(承诺成功/错误由调用程序处理)。我需要的是,给定某些条件,即使$http成功,也要返回一个错误(调用程序会将此条件捕获为拒绝的承诺)

在这个例子中,我试图返回$q.reject(),但这不起作用

这是JavaScript:

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标记了该问题。否则,可能需要编辑标记。