【问题标题】:Reject $http promise on success拒绝成功的 $http 承诺
【发布时间】:2017-09-02 02:22:02
【问题描述】:

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

在这个 plunk 中,我尝试返回 $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();
});

有什么想法吗?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    $http.success()error() 是不是 100% 符合承诺的便捷快捷方式。改用香草承诺then

    $http(config).then(function(response){return $q.reject}, function onError(reason){})
    

    updated plunker

    【讨论】:

      【解决方案2】:

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

      你返回一个你自己的延迟承诺并且解决/拒绝是 on will

       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;
      

      【讨论】:

      • 这不是延迟反模式吗?我试图避免它。
      • 您正在尝试更改内部延迟的解析/拒绝行为,所以我认为没有任何办法。
      • @Variant 恕我直言,我认为这应该是公认的答案,你确实用角度标记了这个问题。否则,可能需要编辑标签。
      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多