成功时拒绝$ http承诺

ps0*_*604 4 javascript angularjs

我有一个函数,它返回$ http GET的承诺(承诺成功/错误由调用者处理).我需要的是,在某些条件下,即使$ http成功,也要返回一个错误(调用者将这个条件视为被拒绝的承诺).

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

http://plnkr.co/edit/iC3Wb1PBUFrXgPbTJyU0?p=preview

这是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();
});
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Myk*_*rov 7

$http.success()并且error()是不是100%符合承诺的便利捷径.使用香草诺言then:

$http(config).then(function(response){return $q.reject}, function onError(reason){})
Run Code Online (Sandbox Code Playgroud)

更新的plunker


Var*_*ant 5

试试这个:http : //plnkr.co/edit/hTNFjXXDfqQ7e7jvNMtg?p=preview

您返回了自己的延期承诺,并且决定/拒绝是自愿的

 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;
Run Code Online (Sandbox Code Playgroud)