Cod*_*oso 3 javascript indexeddb angularjs
在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);
});
});
Run Code Online (Sandbox Code Playgroud)所以,每次我想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');
};
}]);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个问题引起争议.我个人建议每次都打开数据库.其他人会不同意(并且有很多).
如果您可以保证在建立连接后始终会发生数据库请求,则可以使用单个连接.如果您不确定indexedDB如何在各种浏览器中工作,或者不能保证连接已经建立,或者无法保证连接仍然是打开的,那么为每个单独的任务打开一个连接.
如果您知道异步代码的工作原理,那么您可能很好地做任何您认为最好的方法,因为这两种方法在技术上都是错误的.
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |