Javascript Angular JS promise then()未执行
我正在尝试从websql读取数据。当我将所有内容放入控制器时,代码运行良好,但当我将代码移动到单独的服务中时,它不会返回任何结果。我想从服务而不是控制器获取数据 javascript: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;
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中。