私たちはサービスを持っています。AccountService
と呼ばれ、getAccounts(customerId)
というメソッドを公開しています。角度サービスの約束を解決する
その実装では、$ http GET要求を起動し、呼び出し元のコントローラに約束を返し、返されたアカウントの配列を解決したらコントローラのスコープに配置します。簡略図で
はすべて以下のようになります。
// The service
.factory('AccountService', ['$http', function($http) {
var _getAccounts = function(customerId) {
var request = {
'method': 'GET',
'url': 'http://localhost:8081/accounts/' + customerId
};
return $(request);
};
return {
getAccounts: _getAccounts
};
}]);
// Inside the conntroller
AccountService.getAccounts($scope.customerId)
.then(function(response) {
$scope.accounts = response.data;
});
だから、約束は、コントローラのスコープは、アカウントのリストが取り込まれます解決されます一度。
私は上記のコードを私の問題が何であるかというアイデアを得るために単純なものにしていましたが、実際には例外を処理するコード、ウォッチャーをリフレッシュするコードなどです。
私の問題は、このAccountServiceがたくさんのコントローラから使用されていることと、これらすべての見通しで約束を解決することは、このボイラープレートリゾルバコードをすべて繰り返すだけでなく、私がr /すべての単一コントローラテストで成功シナリオと例外シナリオの両方をテストします。
私の質問は: サービスの約束を解決し、約束を返すのではなく、応答を返すよい方法がありますか?
私はAngularとJSの非常に初心者ですので、私の質問が素朴に見える場合は優しくしてください。私はJavaの経験のヒープを持っていると私の心は、ケースではないかもしれないどこでもようにJavaに行くようです。
は、あなたが、一度あなたの$http
は、データをフェッチして行われるように設計し、あなたの工場の変数(ややキャッシュ)に保存することができ、その後の工場コールにご入力のために事前に
はい、私は非同期のものを同期させるのが良い考えではないと思います。再び、私は、java.util.concurrent.Future'が完了するまでスレッドをブロックできるJavaの考え方を混乱させました。 – Julian