2016-09-23 75 views
1

因此,我創建了一個工廠來查詢數據庫並返回數據。在該方法內部,我可以打印到控制檯。但是當我檢查控制器內部的返回數據時,它是空的,請查看下面的代碼,看看你能否提供幫助。Ionic不會將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

我有一個問題有關。簡短的解釋:所有的數據庫操作都是異步檢查http://stackoverflow.com/questions/39563879/sqlite-plugin-for-cordova-code-running-backwards – MikeVelazco

回答

0

1日的事情,你需要從你的諾言的成功回調返回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); 
    }); 
}) 
相關問題