在使用AngularJS中的IndexedDB時,我有這樣的困境,正如標題中所描述的那樣,並不確定什麼纔是正確的方式。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');
};
}]);
感謝您的回覆。我是異步代碼的新手,所以也許這太天真了,但我認爲如果事情是異步的,我們不能確定連接總是打開的。而且,只用一個連接就可以產生不一致的結果,而每次打開連接都很簡單。所以我唯一的擔心是 - 你認爲每次額外的請求會顯着影響性能嗎?或者那些不同意的人的主要反對論點是什麼? – CodeVirtuoso
對於任何感興趣的人,我想通過將調用OpenDatabase移動到websiteService(這是一個工廠)的AddWebsite方法中,我找到了一種方法使我的示例中的代碼更加乾爽。 – CodeVirtuoso
我每次都打開一個連接。根據我的經驗,它不會顯着影響性能。 – Josh