База данных выбирает все angular websql в сервисе, получает массив

#javascript #angularjs #angular-services #angular-promise

#javascript #angularjs #angular-сервисы #angular-обещание

Вопрос:

Как поместить этот код в сервис? (это из https://github.com/paulocaldeira17/angular-websql ) Я имею в виду, что я хочу передать имя таблицы, а затем получить массив с пользователями. Я думаю, мне следует использовать promises, но я понятия не имею, с чего начать.

 $scope.db.selectAll("table_users", function(results) {
  $scope.users = [];
  for(var i=0; i < results.rows.length; i  ){
     $scope.users.push(results.rows.item(i));
  }
  $scope.$apply();
})
  

Ответ №1:

Для операций websql лучше использовать promises.

 SampleService.getUsers("table_name").then(function(){
  console.log("Array of users");
});
  

Обслуживание

 getUsers:function(table_name){
  var deferred = $q.defer();
  $scope.db.selectAll("table_users", function(results) {
  $scope.users = [];
  for(var i=0; i < results.rows.length; i  ){
     $scope.users.push(results.rows.item(i));
  }
   deferred.resolve($scope.users);
});
  return deferred.promise;

}
  

Код не является фактическим, но он даст вам общее представление о решении проблемы.

Некоторая ссылка на использование обещаний $ q в angularjs

  1. Обещания объясняются как мультфильм

  2. Из Angular docs

  3. http://lostechies.com/gabrielschenker/2014/02/04/angularjspart-11-promises/

Комментарии:

1. Спасибо! Но у меня всегда возникают проблемы с .then(function(){}) в контроллерах, потому что код в then выходит за рамки контроллера rest. Хотя я использую государственного провайдера, где есть отличная вещь — resolve, которая решает зависимость, но в случае, если я не использую государственного провайдера, как справиться с этой проблемой?

2. Просто слишком быстро нажал добавить комментарий 😉