【发布时间】:2015-01-21 21:48:06
【问题描述】:
我有 3 个 JSON Web 服务应该在我的应用程序中使用,
我使用$http 从 URL 加载,我的代码是:
$http.get('http://{url}/users')
.then(function (result) {
storeUsers(result);
});
$http.get('http://{url}/news')
.then(function (result) {
storeNews(result);
});
$http.get('http://{url}/pages')
.then(function (result) {
storePages(result);
});
var users = getUsers();
问题:
1- 所有$http 一起运行,不要等到前面的$http 完成。
2- var users = getUsers(); 将在 $http 完成之前运行。
更新: 我将代码更改为:
var loadedService = {
users: false,
news: false,
pages: false
};
function getUsers() {
deferred = $q.defer();
$http.get('http://{url}/users')
.then(function (result) {
loadedService.users = result;
deferred.resolve('I got users');
console.log("Get users");
});
return deferred.promise;
}
function getNews() {
deferred = $q.defer();
$http.get('http://{url}/news')
.then(function (result) {
loadedService.news = result;
deferred.resolve('I got news');
console.log("Get news");
});
return deferred.promise;
}
function getPages() {
deferred = $q.defer();
$http.get('http://{url}/pages')
.then(function (result) {
loadedService.pages = result;
deferred.resolve('I got pages');
console.log("Get pages");
});
return deferred.promise;
}
getNews().then(getUsers()).then(getPages()).then(function () {
console.log('Done !');
});
当我运行我的程序时,我会看到:
XHR finished loading: GET "http://{url}/pages". ionic.bundle.js:16185
Get pages sync.js:133
XHR finished loading: GET "http://{url}/users". ionic.bundle.js:16185
Get users sync.js:56
XHR finished loading: GET "http://{url}/news". ionic.bundle.js:16185
Get news sync.js:107
如您所见,首先加载了pages 服务,然后是users 服务,然后是news,而在我的代码中我说的是getNews().then(getUsers()).then(getPages())。
最后console.log('Done !'); 不显示!
【问题讨论】:
-
你应该使用promises,当一个http promise被解析时执行下一个http请求
-
感谢@Avraam,但我该如何使用承诺?我是 AngularJS 的新手
标签: javascript ajax angularjs