私のアプリケーションには、コントローラーの情報を取得するデータ サービスがあります。この情報は、ローカル ストレージ、ウィンドウ、または ajax リクエストから取得される場合があります。私が直面している問題は、$q
約束の応答が応答のように見えない$http
ことです。
this.getContactDetails = function(data) {
// The first time this method is called, we expect contact details to be preloaded on the page.
// We want to read and return that object then remove it from the page so subsequent requests are to the server.
if(typeof $window.preloadData.contact !== 'undefined') {
var contactDetails = JSON.parse(JSON.stringify($window.preloadData.contact));
delete $window.preloadData.contact;
// Since the method call should always have the same return type, we manually create a deferred object and set the resolution using the $q service.
var deferred = $q.defer();
deferred.resolve(contactDetails);
return deferred.promise;
}
var request = requests.contactDetails.get;
return $http(request);
};
サービスはここ$q
でうまく機能しますが、指定されたオブジェクトとして解決されます。私はそれが応答をラップすることを本当に期待していません。私はこれを達成$httpBackend
できることを知っています。
$httpBackend.whenGET(request).respond(contactDetails);
しかし、このサービスは MockE2E ライブラリで使用されており、これが意図された用途であったとは思えません。後でこれを中止する方法や、同じリクエストで2回使用した場合にどうなるかはわかりませんが、これらの質問を理解することはできます. 私のもう 1 つの懸念は、$http に渡すのと同じ構成オブジェクトを $httpBackend に渡す方法がないように見えることです。$httpBackend はメソッド、URL、本文、およびヘッダーのみを受け入れますが、$http config ではパラメーターを指定できます。
現在、私の回避策は、自分で $http のようなラッパーを作成することです。
var contactDetails = JSON.parse(JSON.stringify({
data: $window.preloadData.contact
}));
しかし、これはあまりエレガントではありません。これを行うためのより良い/正しい方法はありますか?