2016-09-23 2 views
1

Итак, я создал фабрику для запроса данных db и возврата. Внутри метода я могу печатать на консоли. Но когда я проверяю возвращаемые данные внутри контроллера, он пуст, посмотрите код ниже и посмотрите, сможете ли вы помочь.Ионный не возвращает данные sql от фабрики к контроллеру

Вот заводу

rs.factory("userService",function($http,$ionicLoading,$cordovaProgress,$cordovaSQLite,$q){ 
    var user = {}; 

/**get user data */ 
     user.getData = function(){ 
     //stores from the local database 
     var userData = []; 
     var query = "SELECT * FROM users"; 
     $cordovaSQLite.execute(db, query, []).then(function(res) { 

    for (var i=0; i < res.rows.length; i++){ 
     userData.push(res.rows.item(i)); 
    } 
     console.log("User Data : " + JSON.stringify(userData));//this works 

    }, function (err) { 
     console.error(err); 
    }) 

    return userData; 

}; 
return user; 

}); 

Контроллер:

angular.module('starter.controllers', []) 
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state, $cordovaSQLite,$ionicNavBarDelegate,userService) { 

console.log(userService.getData()); // is empty 
}) 

Ничто не возвращается сюда.

+0

У меня есть вопрос, связанный. Короткий anwser: все операции с базой данных - асинхронная проверка http://stackoverflow.com/questions/39563879/sqlite-plugin-for-cordova-code-running-backwards – MikeVelazco

ответ

0

первое, что вам нужно, чтобы вернуть userData от успеха обратного вызова своего обещания, & затем вернуть $cordovaSQLLite.execute обещание, так что вы можете цепи, которые обещают внутри контроллера

user.getData = function() { 
    //stores from the local database 
    var userData = []; 
    var query = "SELECT * FROM users"; 
    //returning promise 
    return $cordovaSQLite.execute(db, query, []).then(function(res) { 
    for (var i = 0; i < res.rows.length; i++) { 
     userData.push(res.rows.item(i)); 
    }   
    //return data once user Data created 
    return userData; 
    }, function(err) { 
    console.error(err); 
    }) 
}; 

Затем внутри контроллера вы можете получить доступ к данным при наличии . то функция над этим методом

angular.module('starter.controllers', []) 
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state, $cordovaSQLite,$ionicNavBarDelegate,userService) { 
    userService.getData().then(function(userData){ 
     console.log(userData); 
    }); 
}) 
Смежные вопросы