我正在编写一个使用PouchDB和SQLite插件的Ionic应用程序。我有一个工厂负责打开数据库并公开一些获取记录的方法等:
.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,所以也许这不是构建它的方法。我可以将数据库创建移动到$rootscope
,这样数据库就可以在所有工厂中访问,但我不明白为什么第二次调用PouchdbFactory.initDB();
意味着没有sqlite_plugin。
有什么想法吗?
答案 0 :(得分:0)
不是它是错误的原因,但我宁愿只返回db实例,如果它已初始化。在init中尝试一个保护条款,检查db已经初始化 - 如果它有直接返回db,如果没有则继续初始化它。