簡體   English   中英

成功時拒絕$ http承諾

[英]Reject $http promise on success

我有一個函數,它返回$ 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();
});

有任何想法嗎?

$http.success()error()是與promises不完全兼容的便捷快捷方式。 then使用香草諾言:

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

更新的plunker

試試這個: 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM