AngularJS + IndexedDB,打开一次数据库供所有控制器使用,还是为每个请求单独打开?
AngularJS + IndexedDB, open database once for all controllers to use, or open it for each request separately?
在 AngularJS 中使用 IndexedDB 时,我遇到了这个难题,如标题中所述,并且不确定正确的方法是什么。
在很多教程中,数据库只打开一次,仅此而已,所有方法都使用该连接。
在一个AngularJS具体的例子中,数据库打开请求,以及所有的CRUD方法都包装在一个工厂中,控制器一加载,就调用open方法,所有 CRUD 方法都在这个控制器中。
我知道让控制器保持苗条是一种很好的做法,这样可以提高它们的可重用性。因此,我为每个 CRUD 方法都有单独的控制器,这意味着我需要单独调用来为每个请求打开数据库,如下所示:
websiteService.openDatabase().then(function() {
websiteService.addWebsite($scope.website.url, $scope.website.color).then(function() {
}, function(err) {
console.log(err);
});
});
所以,每次我想 addWebsite
,我都会先 openDatabase
并等待 promise 解决。
websiteService
是一个工厂,其中所有使用 IndexedDB 的方法都是
此处的最佳做法是什么?如果有另一种方式,这里没有提到,请务必提及。
如果有帮助,这里是完整的控制器代码:
app.controller('AddWebsiteCtrl', ['$scope', '$location', '$routeParams', 'websiteService', function($scope, $location, $routeParams, websiteService) {
$scope.save = function() {
websiteService.openDatabase().then(function() {
websiteService.addWebsite($scope.website.url, $scope.website.color).then(function() {
}, function(err) {
console.log(err);
});
});
$location.path('/overview');
};
$scope.cancel = function() {
$location.path('/overview');
};
}]);
不幸的是,这个问题是有争议的。我个人建议每次都打开数据库。其他人会不同意(并且有很多)。
如果你能保证你的数据库请求总是在建立连接后发生,那么使用单个连接就可以了。如果您不确定 indexedDB 在各种浏览器中的工作方式,或者不能保证连接已经建立,或者不能保证连接仍然打开,那么为每个单独的任务打开一个连接。
如果您知道异步代码的一般工作原理,您可能会做任何您认为最好的事情,因为这两种方法在技术上都没有错。
在 AngularJS 中使用 IndexedDB 时,我遇到了这个难题,如标题中所述,并且不确定正确的方法是什么。
在很多教程中,数据库只打开一次,仅此而已,所有方法都使用该连接。
在一个AngularJS具体的例子中,数据库打开请求,以及所有的CRUD方法都包装在一个工厂中,控制器一加载,就调用open方法,所有 CRUD 方法都在这个控制器中。
我知道让控制器保持苗条是一种很好的做法,这样可以提高它们的可重用性。因此,我为每个 CRUD 方法都有单独的控制器,这意味着我需要单独调用来为每个请求打开数据库,如下所示:
websiteService.openDatabase().then(function() { websiteService.addWebsite($scope.website.url, $scope.website.color).then(function() { }, function(err) { console.log(err); }); });
所以,每次我想 addWebsite
,我都会先 openDatabase
并等待 promise 解决。
websiteService
是一个工厂,其中所有使用 IndexedDB 的方法都是
此处的最佳做法是什么?如果有另一种方式,这里没有提到,请务必提及。
如果有帮助,这里是完整的控制器代码:
app.controller('AddWebsiteCtrl', ['$scope', '$location', '$routeParams', 'websiteService', function($scope, $location, $routeParams, websiteService) {
$scope.save = function() {
websiteService.openDatabase().then(function() {
websiteService.addWebsite($scope.website.url, $scope.website.color).then(function() {
}, function(err) {
console.log(err);
});
});
$location.path('/overview');
};
$scope.cancel = function() {
$location.path('/overview');
};
}]);
不幸的是,这个问题是有争议的。我个人建议每次都打开数据库。其他人会不同意(并且有很多)。
如果你能保证你的数据库请求总是在建立连接后发生,那么使用单个连接就可以了。如果您不确定 indexedDB 在各种浏览器中的工作方式,或者不能保证连接已经建立,或者不能保证连接仍然打开,那么为每个单独的任务打开一个连接。
如果您知道异步代码的一般工作原理,您可能会做任何您认为最好的事情,因为这两种方法在技术上都没有错。