如标题中所述,在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
等待诺言解决。
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在各种浏览器中的工作方式,或者不能保证已建立连接,或者不能保证连接仍处于打开状态,请为每个单独的任务打开一个连接。
如果您知道异步代码通常是如何工作的,那么您可能会做一切尽力而为的事情,因为从技术上讲这两种方法都不对。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句