Ich sehe ein wenig Verwirrung hier. Lassen Sie uns versuchen, es zu löschen. Wenn Sie aufgeschobene Objekt verwenden möchten, müssen Sie den Code ein wenig ändern:
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
};
}]);
Im Detail Funktion getCustomerData
muss das Versprechen Rückkehr mit return deferred.promise
-deferred
Objekt gehören. Innerhalb then()
Callback Sie einfach lösen oder deferred
Versprechen abzulehnen. Sie müssen die deferred.promise
nicht zurückgeben.
Sie können den Code verbessern. Der $http
Dienst gibt eine Zusage zurück, und der Wert, der von then
Rückrufe zurückgegeben wird, wird von then
Methode in einem Versprechen verpackt. Zu wissen, dass Sie die Verwendung von deferred
Objekt entfernen:
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()"
});
};
}]);
Wie Sie sehen können, die 2 then
Rückrufe gibt einfach den response
Objekt, aus diesem Grund können Sie sie weglassen:
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": ''
}
});
};
}]);
Was bedeutet „gleiche Wert“ bedeuten? Im Augenblick tun die Zeilen "return secreted.promise" nichts; gib einfach die Versprechen '$ http' zurück. Keine Notwendigkeit für die aufgeschobenen. –
Haben Sie versucht, die Zeile 'return deferred.promise;' außerhalb der Erfolgs- und Fehlerfunktionen von '.then()' zu setzen? –
@MikeMcCaughan gleicher Wert bedeutet, dass die API-Antwort die gleiche ist wie der vorherige API-Aufruf. – Player