4

我已经包含了 YDN DB 文件 (ydn-db-isw-core-crypt-qry-dev.js) 来加密 Angular 应用程序中的索引 DB。它在 socket.io-1.4.5.js 之后的 index.html 正文部分中添加,加载器 spinner.head 部分包括 plivo.min.js 库-

<script type="text/javascript" src="./assets/ydnCoreCryptQryDev.js"></script> 

早些时候我使用的是普通的 IndexDB,一切进展顺利。但是在开发人员工具中可以看到收集的详细信息。

现在包含 YDN DB 后,它只是在窗口会话存储中设置用户凭据并完成 Db 初始化后继续加载主页。

数据库初始化代码是 -

        function open() {
        var deferred = $q.defer();
        var options = {
          Encryption: {
            encryptKey: false,   // optional encrypt primary key
            secrets: [{
                name: 'dddd',
                key: 'xxxxxxxxxx'
            }]
          }
        };

        var schema = {
          stores:[{
            name:'profile',
            encrypted: true
          },{
            name:'contacts',
            encrypted: true
          },{
            name:'archive',
            encrypted: true
          },{
            name:'avatars',
            encrypted: true
          },{
            name:'groups',
            encrypted: true
          },{
            name:'notifications',
            encrypted: true
          }]
        };

        var db = new ydn.db.Storage('nowconferdb', schema, options);

        db.onReady(function() {
            console.log('DB is initialized');
            avatarstorage.setDB(db);
            contactstorage.setDB(db);
            profilestorage.setDB(db);
            groupstorage.setDB(db);
            archivestorage.setDB(db);
            notificationstorage.setDB(db);
            deferred.resolve(true);
        });

        db.addEventListener('fail', function (event) {
            var err = event.getError();
            if (err.name == 'versionchange') {
                console.log('The application is updated, please refresh to upgrade.');
                avatarstorage.setup(db);
                contactstorage.setup(db);
                profilestorage.setup(db);
                groupstorage.setup(db);
                archivestorage.setup(db);
                notificationstorage.setup(db);
            } else {
                console.log('connection failed with ' + err.name + ' by ' + err.message);
                db = null; // no operation can be placed to the database instance
            }

            deferred.reject(false);
        });

        return deferred.promise;
    }

在以下应该执行之后,它也没有执行,我将数据库传递给多个服务以供使用。-

            storageservice.open().then(function() {
            console.log('post initializing storageservice'); // <<<<
            if (me.getAuth()) {
                console.log('user is authenticated');   // <<<<
                me.loadMe(sessionUser._id).then(function(profile) {
                    me.setMe(angular.extend(profile, sessionUser)).then(function() {
                        console.log('setting user');
                        deferred.resolve();
                    },
                    function() {
                        deferred.reject(1);
                    });
                }, function() {
                    me.setMe(sessionUser).then(function() {
                        console.log('setting user info');
                        deferred.resolve();
                    }, function() {
                        deferred.reject(1);
                    });
                });
            }
            else {
                console.log('user is not authenticated');
                me.loadMe(sessionUser._id).then(function(profile) {
                   console.log('loaded profile:'+JSON.stringify(profile));
                   deferred.resolve(profile);
                }, function() {
                    me.setMe(sessionUser).then(function() {
                        console.log('setting user details');
                        deferred.resolve();
                    }, function() {
                        console.log('failed to set user');
                        deferred.reject(1);
                    });
                });
            }
        });

有人可以帮忙吗。

非常感谢。

更新 -

使用回调方法代替 deferred.promise 并且代码开始执行到下一个块(获取“初始化存储服务”的控制台,“用户已通过身份验证”)。

deferred.promise 看起来一切都很好,有点尴尬!

4

0 回答 0