我正在使用工厂从Parse.com查询数据,这在我的离子应用程序中多次出现,并希望对我的代码应用更多的DRY。
要拨打我正在使用的数据:
ParseFactory.provider('Clients', query).getAll().success(function(data) {
$localStorage.Clients = data.results;
}).error(function(response) {
errorFactory.checkError(response);
});
并经常连续运行其中许多来从不同的类中获取页面加载的数据。
是否可以在所有这些的末尾使用一个错误块?像这样:
ParseFactory.provider('Favourites', query).getAll().success(function(data) {
$localStorage.Favourites = data.results;
})
ParseFactory.provider('Somethings/', query).getAll().success(function(data) {
$localStorage.Programmes = data.results;
})
ParseFactory.provider('UserItems', query).getAll().success(function(data) {
$localStorage.UserExercises = data.results;
})
ParseFactory.provider('Customers', query).getAll().success(function(data) {
$localStorage.Clients = data.results;
}).error(function(response) {
errorFactory.checkError(response);
});
答案 0 :(得分:1)
您可以创建辅助方法:
function query(resource, query) {
function querySucceeded(data) {
$localStorage[resource] = data.results;
}
function queryFailed() {}
ParseFactory.provider(resource, query)
.getAll()
.success(querySucceeded)
.error(queryFailed);
}
然后只需致电:
query('Favourites', query);
query('Customers', query);
等等。
或者,您可以将queryFailed因子排除在外:
function query(resource, query) {
function querySucceeded(data) {
$localStorage[resource] = data.results;
}
return ParseFactory.provider(resource, query)
.getAll()
.success(querySucceeded);
}
function queryFailed() {
}
$q.all([
query('Favourites', query1),
query('UserItems', query2)])
.error(queryFailed);
答案 1 :(得分:1)
$ q.all获取promises的数组(或对象),并返回一个。
在解决所有原始承诺后,将解决返回的承诺。一旦最初的承诺被拒绝,它就会被拒绝。
所以,你可以简单地做的就是
var request = function(path) {
return ParseFactory.provider(path, query).getAll();
};
var promises = {
favourites: request('Favourites'),
programmes: request('Somethings/'),
exercises: request('UserItems'),
customers: request('Customers')
};
$q.all(promises).then(function(results) {
$localStorage.Favourites = results.favourites.data.results;
// ...
}).catch(function() {
// ...
});