3

我试图在 pouchdb 复制时跟踪更改以创建加载屏幕。

我有几个数据库,每个数据库大约有 2000 个文档,初始加载需要很长时间,所以我希望应用程序向用户指示后台发生的情况。

  //define vars
  var nameDB = "location";
  var remoteDB = new PouchDB("http://localhost:5984/" + nameDB);
  var localDB = new PouchDB(nameDB);
  var localdocCount;
  var localdocCounter = 0;
  var remotedocCount;

  //wrap replication in reusable function
  function replicate(){
    //replicate TO the server
    PouchDB.replicate(localDB,remoteDB, {
      continuous: false,
      attachments: true
    },
    function(){

        //on callback replicate FROM server
        PouchDB.replicate(remoteDB,localDB, {
          continuous: false,
          attachments: true
        },
        function(){
           //replicate FROM complete
        );
    });

    //compact local database to keep size down
    //all revisions are replicated to the server 
    //no need to keep them locally
    localDB.compact();
  }

  //get the remote db info first and see how many documents it has
  //remote update_seq how does it match up to localdb update_seq?
  remoteDB.info(function(err, info) {
    remotedocCount = info.doc_count;
    console.log(info);
  });

  //get info for local db for comparison with remote
  localDB.info(function(err, info) {

    localdocCount = info.doc_count;

    //Actually run the replication now that we have the 
    //remote and local db info
    replicate();

    //track any changes to the localdb
    localDB.changes({
      continuous: true,
      onChange: function(){

        //change detected increment counter
        localdocCounter++;

        console.log("Downloaded " 
          + (localdocCount + localdocCounter) 
          + " of " + remotedocCount + " to " + nameDB);

        //localdocCount === The total Documents in the local database
        //localdocCounter === The changes that have been made since
        //remotedocCount === The amount of documents we need


      }

    });
  });

上面的代码是我尝试跟踪从服务器下载到客户端的文档数量。

上面的代码有效,我可以看到文件正在下载。

然而,这只需要处理第一个加载场景,当用户更新文档时呢?

这就是我认为 update_seq 发挥作用的地方。

但我不知道如何使用 update_seq 来准确了解需要进行的更改。

总而言之,我可以查看是否正在发生更改,但我看不到如何获得应用程序认为自己是最新的所需的更改总量。

也许这种方法完全关闭了?

4

1 回答 1

0

所以要注意一件事

   //on callback replicate FROM server
    PouchDB.replicate(remoteDB,localDB, {
      continuous: false,
      attachments: true
    },
    function(){
       //replicate FROM complete
    );

不赞成使用

   //on callback replicate FROM server
    PouchDB.replicate(remoteDB,localDB, {
      continuous: false,
      attachments: true,
      complete: function() {
       //replicate FROM complete
      }
    });

update_seq不能用作文档数量的代理,它是从哪里复制的标记,可能与文档写入可能或可能不重合,但是考虑到doc_count复制的两侧,docs_written似乎你有一个相当准确的柜台?

哦,我只是多读了你的代码,你不需要调用更改,复制有onChange更多信息,我们可能想研究让它更自动化,这是一个相当普遍的请求

至于超出第一次加载的请求,似乎您的 UI 只需要一个非常小的更改,除非您以非常慢的复制速度大批量编写。

于 2014-03-06T01:18:02.020 回答