在第二个Angular工厂重新打开PouchDB会导致Pouch不使用SQLite插件

时间:2016-03-22 20:23:35

标签: angularjs ionic-framework pouchdb

我正在编写一个使用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。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不是它是错误的原因,但我宁愿只返回db实例,如果它已初始化。在init中尝试一个保护条款,检查db已经初始化 - 如果它有直接返回db,如果没有则继续初始化它。