【发布时间】:2015-12-19 12:24:30
【问题描述】:
为了进行 API 调用,我创建了以下 Angular 服务。
(function (module) {
module.service('APIService',function ($http, $q) {
console.log("Reached APIService")
var deferred = $q.defer();
this.getData = function (requestURL) {
console.log("Reached APIService @GET", requestURL);
$http.get(requestURL).success(
function (data, status) {
deferred.resolve(data);
console.log("In service",status,data);
}).error(
function (data, status) {
deferred.reject(data);
console.log(status);
});
return deferred.promise;
};
this.postData = function (requestURL, requestObj) {
console.log("Reached APIService @POST", requestURL, requestObj);
$http.post(requestURL, requestObj).success(
function (data, status) {
deferred.resolve(data);
console.log(status);
}).error(
function (data, status) {
deferred.reject(data);
console.log(status);
});
return deferred.promise;
};
});
}(angular.module("MainApp")));
我已将它注入我的两个控制器中。但是,我面临以下问题:
-
当我第一次在第一个控制器中调用它时,它可以正常工作并返回所需的结果。但是,当我在第二个控制器中按如下方式调用它时:
APIService.getData(Config + headerURL).then(function (response) { console.log(Config + headerURL); console.log("header response from API", response); },function(error) { console.log("API call for header data failed"); });
由于我的服务返回一个承诺对象,我不希望 .then() 中的代码在服务数据到达之前工作。 但是,它在服务数据到达之前运行(不知道如何)。最奇怪的是,我在 .then() 中得到的响应实际上并不是来自这个 URL(Config+headerURL)的响应,而是从之前在第一个控制器中调用的不同 URL 获得的响应。 APIService 服务。
只是为了通知:来自当前 URL 的实际响应确实会在稍后阶段到达。
我知道异步调用,我认为在这种情况下它有一些事情要做,但我猜 .then() 在 Angular 中处理它。所以我很困惑这里有什么问题。有没有人能解释一下?
【问题讨论】:
标签: javascript angularjs angular-services