【问题标题】:AngularJS + IndexedDB, open database once for all controllers to use, or open it for each request separately?AngularJS + IndexedDB,一次打开数据库供所有控制器使用,还是分别为每个请求打开它?
【发布时间】:2015-04-21 12:47:48
【问题描述】:

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

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

  2. 1234563控制器。
  3. 我知道保持控制器纤细是一种很好的做法,可以让它们更易于重复使用。因此,我对每个 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');
    };  
}]);

【问题讨论】:

    标签: javascript angularjs indexeddb


    【解决方案1】:

    不幸的是,这个问题是有争议的。我个人建议每次都打开数据库。其他人会不同意(并且有很多)。

    如果您可以保证您的数据库请求总是在建立连接之后发生,那么使用单个连接就可以了。如果您不确定 indexedDB 在各种浏览器中的工作方式,或者不能保证连接已经建立,或者不能保证连接仍然打开,那么为每个单独的任务打开一个连接。

    如果您知道异步代码的一般工作原理,那么您可能会做任何您认为最好的事情,因为这两种方法在技术上都不是错误的。

    【讨论】:

    • 感谢您的回复。我是异步代码的新手,所以也许这很天真,但我认为如果事情是异步的,我们不能确定连接总是打开的。并且使用单个连接对我来说产生了不一致的结果,而每次打开连接都可以正常工作。所以我唯一剩下的担心是 - 你认为每次这个额外的请求都会显着影响性能吗?或者那些不同意的人的主要反对论点是什么?
    • 对于任何感兴趣的人,我想我找到了一种方法,可以通过将对 OpenDatabase 的调用移动到 websiteService(这是一个工厂)中的 AddWebsite 方法来使我的示例中的代码更加干燥。
    • 我每次都打开一个连接。根据我的经验,它不会显着影响性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多