我需要在加载一个为用户准备页面的状态时运行一系列函数。
这些函数基本上是对Parse.com的三次调用(不能将它们组合成一个查询,因为它们在不同的类中)
三个函数(parse.com查询)是:
虽然我分别有这三个函数,但我想要一个更强大的方法来做这个,而不是像这样一个接一个地运行函数:
getFavourites();
getPageData();
getUserData();
我的三个功能是这样的:
var getFavourites = function() {
var query = {
user: {
"__type": "Pointer",
"className": "_User",
"objectId": Parse.User.current().id
}
};
ParseFactory.provider('Favourites', query).getAll().success(function(data) {
var favouritesArray = [];
for (var i = 0; i < data.results.length; i++) {
favouritesArray = data.results[i].favourites;
};
$localStorage.favourites = favouritesArray;
favouriteExerciseIds();
// elasticFavouriteSearch(favouriteIds);
}).error(function(response) {
errorFactory.checkError(response);
});
};
var getSavedExercises = function() {
var query = {
'userId': Parse.User.current().id
};
ParseFactory.provider('UserExercises', query).getAll().success(function(data) {
var savedExercises = [];
for (var i = 0; i < data.results.length; i++) {
var exercise = {
exerciseName: data.results[i].exerciseName,
exerciseDescription: data.results[i].exerciseDescription,
images: data.results[i].images,
difficulty: data.results[i].difficulty,
id: data.results[i].objectId
}
savedExercises.push(exercise);
};
$localStorage.savedExercises = savedExercises;
}).error(function(response) {
errorFactory.checkError(response);
});
};
var getPageData = function() {
ParseFactory.provider('Programme/').get($stateParams.loadProgramme).success(function(data) {
$localStorage.programme = data;
$scope.programme = $localStorage.programme;
addedExercises();
}).error(function(response) {
errorFactory.checkError(response);
});
}
答案 0 :(得分:2)
让你的所有方法都返回一个承诺
然后您可以使用$q.all
方法在所有承诺解决后显示页面。
检查以下代码,
var init = function(){
$q.all([ getFavourites(), getSavedExercises(), getPageData() ]).then(function(responses){
//Show The page, check responses for promise success
});
};
var getFavourites = function() {
var deferred = $q.defer();
var query = {
user: {
"__type": "Pointer",
"className": "_User",
"objectId": Parse.User.current().id
}
};
ParseFactory.provider('Favourites', query).getAll().success(function(data) {
var favouritesArray = [];
for (var i = 0; i < data.results.length; i++) {
favouritesArray = data.results[i].favourites;
};
$localStorage.favourites = favouritesArray;
favouriteExerciseIds();
// elasticFavouriteSearch(favouriteIds);
deferred.resolve('');
}).error(function(response) {
errorFactory.checkError(response);
deferred.reject(response);
});
return deferred.promise;
};
var getSavedExercises = function() {
var deferred = $q.defer();
var query = {
'userId': Parse.User.current().id
};
ParseFactory.provider('UserExercises', query).getAll().success(function(data) {
var savedExercises = [];
for (var i = 0; i < data.results.length; i++) {
var exercise = {
exerciseName: data.results[i].exerciseName,
exerciseDescription: data.results[i].exerciseDescription,
images: data.results[i].images,
difficulty: data.results[i].difficulty,
id: data.results[i].objectId
}
savedExercises.push(exercise);
};
$localStorage.savedExercises = savedExercises;
deferred.resolve('');
}).error(function(response) {
errorFactory.checkError(response);
deferred.reject(response);
});
return deferred.promise;
};
var getPageData = function() {
var deferred = $q.defer();
ParseFactory.provider('Programme/').get($stateParams.loadProgramme).success(function(data) {
$localStorage.programme = data;
$scope.programme = $localStorage.programme;
addedExercises();
deferred.resolve('');
}).error(function(response) {
errorFactory.checkError(response);
deferred.reject(response);
});
return deferred.promise;
}