2016-05-03 8 views
0

私は$httpを使用して電話をかけています。成功したコールの結果に基づいて、私はエラー/拒否を投げて、それをエラーとして次のコールにトリクルさせることに決めました。しかし、エラーがスローされた場合、プロセスを停止するだけです。どのようにして、$ httpの約束事を$ qコードでラップせずに拒否するように強制できますか?

// A service 

angular.module('app').factory('aService', function ($http, config) {  
    return { 
    subscribe: function (params) { 
     return $http({ 
     url: '...' 
     method: 'JSONP' 
     }).then(function (res) { 
     // This is a successful http call but may be a failure as far as I am concerned so I want the calling code to treat it so. 
     if (res.data.result === 'error') throw new Error('Big Errror') 
     }, function (err) { 
     return err 
     }) 
    } 
    } 
}) 


// Controller 
aService.subscribe({ 
    'email': '...' 
}).then(function (result) { 

}, function (result) { 
    // I want this to be the Big Error message. How do I get here from the success call above? 
}) 

上記のコードでは、大きなエラーメッセージが拒否された呼び出しとして終了するようにしたいと思います。しかし、この場合、それはちょうどエラーで死ぬ。これは、私がBluebirdという言葉で物事を処理する方法ですが、ここには行きません。

+1

いずれの場合も、拒否された約束を返すだけです。$ q.reject( 'reason')。 –

+0

ああ私は '$ q.deferred'でラップしなければならないと思っていましたが、うまくいきました。あなたがしたい場合は、答えとして投稿することができます。 – cyberwombat

答えて

2

Tiはちょうどあなたの$ HTTP結果から

$http.get(url).then( function (response){ if(something){ return $q.reject('reason'); } return response; } )

あなたがAA拒否された約束を得るでしょうし、それさえときに反応することができますこの方法のようなものを拒否約束$q.reject('reason')を返す拒否状態でチェーンを続けますapi呼び出しは成功です。

関連する問題