Javascript Angular JS promise then()未执行

Javascript Angular JS promise then()未执行,javascript,angularjs,Javascript,Angularjs,我正在尝试从websql读取数据。当我将所有内容放入控制器时,代码运行良好,但当我将代码移动到单独的服务中时,它不会返回任何结果。我想从服务而不是控制器获取数据 javascript: var myApp = angular.module('myApp',[]); myApp.controller('MyCtrl', ['$scope', 'myService', '$q', function ($scope, myService, $q) { $scope.count = 0;

我正在尝试从websql读取数据。当我将所有内容放入控制器时,代码运行良好,但当我将代码移动到单独的服务中时,它不会返回任何结果。我想从服务而不是控制器获取数据

javascript:

var myApp = angular.module('myApp',[]);
myApp.controller('MyCtrl', ['$scope', 'myService', '$q', function ($scope, myService, $q) {
        $scope.count = 0;
        $scope.connect = function() {
            var deferred = $q.defer();
  myService.method1().then(function(results){
              $scope.count = results.rows.length;
                },
            function (error) {
            console.log("Error");
            }
        );
 }])

myApp.service('myService', function($q) {
    var deferred = $q.defer();
    this.method1 = function() {
                     var db = openDatabase('mydb2', '1.0', 'Test DB', 2 * 1024 * 1024);
         var msg;

         db.transaction(function (tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (3, "foobar")');
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (4, "logmsg")');
            msg = '<p>Log message created and row inserted.</p>';
            document.querySelector('#status').innerHTML =  msg;
         });

         db.transaction(function (tx) {
           tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
                 if(results.rows.length > 0) {
                    console.log("Inside resolve");
                 deferred.resolve(results);
                 $scope.$apply();
               } else {
                    deferred.reject(response);
               }
            }, null);
         });

         return deferred.promise;
        };

});
标记:

<div ng-controller="MyCtrl">
{{count}}

  <div id="status" name="status">Status Message</div>
</div>

jsIDLE:

我使用$rootScope获得了预期的结果。$apply;延迟后。resolveresults

更新的小提琴是


谢谢内达的建议

我使用$rootScope.$apply获得了预期的结果;延迟后。resolveresults

更新的小提琴是


谢谢内达的建议

小提琴是没有意义的,因为它不可能运行console.logInside解析;是否执行?在此行中,deferred.rejectresponse;-什么是回应?似乎是从瘦文件中提取的变量,您可能希望创建延迟对象var deferred=$q.deferred;内部方法1不是外部方法。否则,您将遇到多个请求的问题。错误处理程序正在运行吗?控制台中是否出现异常?注入$rootScope并使用$rootScope。$apply;递延风险值=$q.defer;应该放在方法1中。小提琴是没有意义的,因为它不可能运行console.logInside解析;是否执行?在此行中,deferred.rejectresponse;-什么是回应?似乎是从瘦文件中提取的变量,您可能希望创建延迟对象var deferred=$q.deferred;内部方法1不是外部方法。否则,您将遇到多个请求的问题。错误处理程序正在运行吗?控制台中是否出现异常?注入$rootScope并使用$rootScope。$apply;递延风险值=$q.defer;应该放在方法1中。