Я пишу приложение Ionic, которое использует PouchDB и плагин SQLite. У меня есть фабрика, ответственная за открытие db и выявление некоторых методов для получения записей и т. Д.:
.factory('PouchdbFactory', ['$q', function ($q) {
var db,
codes = [];
var initDB = function() {
db = new PouchDB('codes', {adapter: 'websql', auto_compaction: true, location: 2}); // location should be 2
// Listen for changes on the database
db.changes({ live: true, since: 'now', include_docs: true}).on('change', onDatabaseChange);
db.info().then(console.log.bind(console));
}
...etc...
И еще один завод, который возвращает методы, которые используются для периодического получения записей и их изменения.
.factory('OtpFactory', ['$rootScope', '$interval', 'PouchdbFactory', function($rootScope, $interval, PouchdbFactory) {
var otpCodes,
globalTimerPromise,
totpObj = new TOTP();
// this breaks sqllite plugin (db.info().then(console.log.bind(console)); returns sqlite_plugin: false )
PouchdbFactory.initDB();
PouchdbFactory.getAllCodes().then(function(codes) {
otpCodes = codes;
});
Вызов PouchdbFactory.initDB();
на второй фабрике получается сумка, не использующая плагин SQLite (db.info().then(console.log.bind(console));
возвращает sqlite_plugin: false
).
Я все еще изучаю Angular, поэтому, возможно, это не способ структурировать его. Я мог бы переместить создание db в $rootscope
чтобы база данных могла иметь доступ на всех фабриках, но я не понимаю, почему вызывать PouchdbFactory.initDB();
второй раз означает отсутствие sqlite_plugin.
Есть идеи?
Не то, чтобы это причина ошибки, но я бы скорее просто вернул экземпляр db, если он был инициализирован. Попробуйте предложение guard в init, которое проверяет db, было инициализировано - если у него есть обратное db сразу, если нет, то продолжайте его инициализировать.