在承诺链的末尾捕捉错误

时间:2015-09-03 06:50:05

标签: angularjs parse-platform error-handling

我正在使用工厂从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);
}); 

2 个答案:

答案 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() {
    // ...
});