在 AngularJS 中使用 IndexedDB 时,我遇到了这个难题,如标题中所述,并且不确定什么是正确的方法。
在很多教程中,数据库只打开一次,仅此而已,所有方法都使用那个连接。
在一个AngularJS的具体例子中,数据库打开请求,以及所有的CRUD方法都包装在一个工厂里, Controller 一加载就调用open方法,所有的CRUD方法都在这个工厂里 Controller 。
我知道让 Controller 保持纤薄是一种很好的做法,这样可以提高它们的可重用性。因此,我为每个 CRUD 方法都有单独的 Controller ,这意味着我需要单独调用来为每个请求打开数据库,如下所示:
websiteService.openDatabase().then(function() { websiteService.addWebsite($scope.website.url, $scope.website.color).then(function() { }, function(err) { console.log(err); }); });
因此,每次我想addWebsite
时,我都会先openDatabase
并等待promise 解决。
websiteService
是一个工厂,所有使用 IndexedDB 的方法都是
此处的最佳做法是什么?如果有另一种方式,这里没有提到,请务必提及。
如果有帮助,这里是完整的 Controller 代码:
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 在各种浏览器中的工作方式,或者不能保证连接已经建立,或者不能保证连接仍然打开,那么请为每个单独的任务打开一个连接。
如果您了解异步代码的一般工作原理,那么您可能会做任何您认为最好的事情,因为从技术上讲,这两种方法都没有错。
关于javascript - AngularJS + IndexedDB,一次打开数据库供所有 Controller 使用,还是为每个请求单独打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772668/