【发布时间】:2015-02-09 02:17:08
【问题描述】:
我是 angularjs 的新手。我的目标很简单。我想进行 ajax 调用来获取数据,一旦完成,我想进行第二次调用以获取另一组数据,该数据依赖于第一组中的信息。
我正在尝试利用承诺机制来做到这一点,这样我就可以利用链接而不是嵌套的 ajax 调用,并更好地保留拥有可以根据需要捆绑在一起的独立函数的能力。
我的代码如下所示:
var promiseGetWorkTypes = function ($q, $scope, $http) {
console.log("promiseGetWorkTypes");
return $q(function (resolve, reject) {
$http({
method: 'GET',
url: '/WorkTypes'
}).then(
function (payload) {
console.log("Got workttypegroups")
console.log(payload);
$scope.WorkTypeGroups = payload.data;
console.log("End of worktypegroups");
resolve(payload);
},
function (payload) {
reject(payload);
});
});
};
var promiseGetRecentActivities = function ($q, $scope, $http) {
console.log("promiseGetRecentActivities");
return $q(function (resolve, reject) {
$http({
method: 'GET',
url: '/RecentHistory'
}).then(
function (payload) {
$scope.RecentActivities = payload.data;
resolve(payload);
},
// data contains the response
// status is the HTTP status
// headers is the header getter function
// config is the object that was used to create the HTTP request
function (payload) {
reject(payload);
});
});
};
var index = angular.module("index", []);
index
.controller('EntitiesController', function ($scope, $http, $timeout, $q) {
promiseGetWorkTypes($q, $http, $scope)
.then(promiseGetRecentActivities($q, $http, $scope));
}
但是,当我查看调试控制台时,我发现对“promiseGetRecentActivities”的调用是在“promiseGetWorkTypes”的 Ajax 处理调用发生之前开始的。
我在这里遗漏了什么或做错了什么?
【问题讨论】:
-
不,不是
$q.all()。 OP 希望连续进行两个 ajax 调用。 -
@BenjaminGruenbaum,您的链接涉及带有承诺的反模式,并确定了对延迟承诺的不必要使用。我的代码确实包含不必要的复杂性,因为 $http 将返回一个不需要由 $q 包装的承诺。这是因为我之前认为这可能是我最初的 $http 调用承诺不起作用的原因。显然情况并非如此。我已经修改了我的实际项目,我只是想确保阅读此内容的任何人都知道在这种情况下使用 $q 是不必要的并且应该避免。感谢您指出这一点。
标签: javascript ajax angularjs promise angular-promise