javascript - AngularJS + IndexedDB,一次打开数据库供所有 Controller 使用,还是为每个请求单独打开?

标签 javascript angularjs indexeddb

在 AngularJS 中使用 IndexedDB 时,我遇到了这个难题,如标题中所述,并且不确定什么是正确的方法。

  1. 在很多教程中,数据库只打开一次,仅此而已,所有方法都使用那个连接。

  2. 在一个AngularJS的具体例子中,数据库打开请求,以及所有的CRUD方法都包装在一个工厂里, Controller 一加载就调用open方法,所有的CRUD方法都在这个工厂里 Controller 。

  3. 我知道让 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/

相关文章:

javascript - IndexedDB 对象键 : does the size matter?

javascript - 如何在 WinJS Windows 8 应用程序中正确检索 IndexedDb 中的所有数据?

javascript - IndexedDB 游标 .onsuccess 作为 promise

javascript - 括号中的 JSLint 表示音频未定义,但不会提示图像

javascript - 访问app.js中的io对象

javascript - 无法在固定标题内滚动移动下拉菜单

javascript - 使用 AngularJS 的 Web 应用程序 : Show error-page in case JavaScript deactivated in browser

php - 如何使用angularjs上传图片

javascript - Span.innerHTML 返回文本但 Span.value 返回未定义?

javascript - Uncaught Error : [$injector:modulerr] when using Angular JS with planet 9