私はここで少し混乱しています。それをクリアしようとしましょう。あなたは繰延オブジェクトを使用する場合は、あなたのコードビットを変更する必要があります。具体的には
appName.service('FetchCustomerDate', ['$http', '$q', function ($http, $q) {
var self = this;
self.getCustomerData = function (token, name) {
var deferred = $q.defer();
$http({ // Do not return here, you need to return the deferred.promise
method: 'GET',
url: '...some URL here...',
headers: {
"Authorization": token,
"x-xcmc-auth": ''
}
}).then(function (response) {
deferred.resolve(response); // It's correct, you are resolving the deferred promise here.
// return deferred.promise; // You do not need to return the deferred.promise here.
}, function (response) {
deferred.reject(response); // It's correct, you are rejecting the deferred promise here.
// return deferred.promise; // You do not need to return the deferred.promise here.
});
return deferred.promise; // The function must return the deferred.promise
};
}]);
、機能getCustomerData
はreturn deferred.promise
でdeferred
オブジェクトに属する約束を返す必要があります。 then()
コールバック内では、deferred
約束を解決または拒否するだけです。 deferred.promise
を返す必要はありません。
コードを改善することができます。 $http
サービスは約束を返し、then
コールバックによって返された値は約束でthen
メソッドでラップされます。あなたがdeferred
オブジェクトの使用削除することができ、ことを知っ:あなたが見ることができるように
appName.service('FetchCustomerDate', ['$http', function ($http) {
var self = this;
self.getCustomerData = function (token, name) {
return $http({ // Here, you need to return the promise returned by $http. Than promise will contain the response returned inside "then" callbacks.
method: 'GET',
url: '...some URL here...',
headers: {
"Authorization": token,
"x-xcmc-auth": ''
}
}).then(function (response) {
return response; // Simply return the response, it will be wrapped in a resolved promise by "then()"
}, function (response) {
return response; // Simply return the response, it will be wrapped in a rejected promise by "then()"
});
};
}]);
を、2つのthen
コールバックは、単にあなたがそれらを省略することができ、この理由のため、response
オブジェクトを返します。
appName.service('FetchCustomerDate', ['$http', function ($http) {
var self = this;
self.getCustomerData = function (token, name) {
return $http({ // Here, you need to return the promise returned by $http. Than promise will contain the response form the GET call
method: 'GET',
url: '...some URL here...',
headers: {
"Authorization": token,
"x-xcmc-auth": ''
}
});
};
}]);
「同じ値が」どういう意味:
通常フェッチは次のようになりますか?今、 'return deferred.promise'行は何もしません。 '$ http'約束を返してください。延期の必要はありません。 –
'return deferred.promise;'行を '.then()'の成功関数と失敗関数の外に置こうとしましたか? –
@MikeMcCaughan同じ値は、APIの応答が以前のAPI呼び出しと同じであることを意味します。 – Player