2016-01-29 5 views
0

После тестирования pouchDB для моего Ионного проекта я попытался зашифровать свои данные криптовакой. Но у меня есть проблема с использованием проектных документов. Я использовал следующий код:Использование проектных документов в pouchDB с помощью криптопакета

  1. Один из моих дизайнерских документов:

    var allTypeOne = { 
        _id: '_design/all_TypeOne', 
        views: { 
         'alle_TypeOne': { 
         map: function (doc) { 
          if (doc.type === 'type_one') { 
           emit(doc._id); 
          } 
         }.toString() 
         } 
        } 
    }; 
    
  2. Для инициализации моей базы данных:

    function initDB() { 
        _db = new PouchDB('myDatabase', {adapter: 'websql'}); 
        if (!_db.adapter) { 
        _db = new PouchDB('myDatabase'); 
        } 
        return _db.crypto(password) 
        .then(function(){ 
         return _db; 
        }); 
    
        // add a design document 
        _db.put(allTypeOne).then(function (info) { 
    
        }).catch(function (err) { 
    
        } 
    } 
    
  3. Чтобы получить все документы type_one:

    function getAllData { 
        if (!_data) { 
        return $q.when(_db.query('all_TypeOne', { include_docs: true})) 
         .then(function(docs) { 
         _data = docs.rows.map(function(row) { 
          return row.doc; 
         }); 
         _db.changes({ live: true, since: 'now', include_docs: true}) 
          .on('change', onDatabaseChange); 
         return _data; 
         }); 
        } else { 
        return $q.when(_data); 
        } 
    } 
    

Этот код работает без использования крипто-чека, но если я вставляю _db.crypto (...), в моем списке не отображаются данные. Может кто-нибудь мне помочь? Заранее спасибо!

ответ

0

Я предполагаю, что ваш вопрос происходит до того, как вызов криптографии завершился. Помните, javascript является асинхронным. Поэтому дождитесь завершения криптового вызова перед тем, как поставить ваш проектный документ. А затем используйте обратный вызов для доступа к вашей базе данных после того, как все будет готово. Что-то вроде следующего:

function initDB(options) { 
    _db = new PouchDB('myDatabase', {adapter: 'websql'}); 
    if (!_db.adapter) { 
    _db = new PouchDB('myDatabase'); 
    } 

    _db.crypto(password) 
    .then(function(){ 
     // add a design document 
     _db.put(allTypeOne).then(function (info) { 
     options.success(_db); 
     }) 
     .catch(function (err) { console.error(err); options.error(err)}) 
    .catch(function (err) { console.error(err); options.error(err);}) 
    } 
} 

initDB({ 
    success:function(db){ 
    db.query.... 
    } 
) 
+0

Я пробовал это раньше, но это не помогло. Тем временем я узнал, что проблема была слушателем изменений. Когда я его удалил, шифрование и даже проектные документы работали без каких-либо проблем. – user2836375