CouchbaseLite等待拉动复制完成

时间:2017-08-25 01:22:48

标签: couchdb couchbase-lite

我有一个CouchDB,我通过CouchBaseLite 1.4连接。在继续申请之前,我无法等待取出所有文件。

目前我正以非常苛刻的方式实现这一目标,并且我希望根据正确的编码标准来解决这个问题。

电流:

pull.setContinuous(false);
pull.start();

//Waits for pull replication to start pulling in data
while(!pull.isRunning());

//Waits for pull replication to finish.
while(!pull.getStatus().equals(Replication.ReplicationStatus.REPLICATION_STOPPED));

//Set continuous to true
pull.setContinuous(true);

//Start it again.
pull.start();

我这样做的原因是我可能在数据库中有2个文档需要等待,如果它们不存在则桌面应用程序进入设置模式。

  • 有没有办法等待所有文件完成拉动    没有hacky double while
  • 更好的是,我们假设我知道文档的_id。有没有办法等到两个人都被拉下来才能继续?

1 个答案:

答案 0 :(得分:1)

使用更改侦听器。要监控复制,您需要类似

的内容
export class RecentSalesComponent implements OnInit {

  private gridView: GridDataResult;
  private data: Object[];
  private pageSize: number = 10;
  private skip: number = 0;

  private items: any[];

  status;
  statuses = [];

  outlet = '';
  selected;
  selectedData;



  ngOnInit() {

    console.log(this.userId);
    this.http.post(this.host, {
        'datefrom': '2017-05-27',
        'dateto': '',
        'userId': this.userId
      })
      .map(res => res.json())
      .subscribe(data => {
        this.items = data;
        this.loadItems();
      }, error => {
        console.log(error);
      });

    this.statuses = [{
        id: 1,
        value: 'Successful',
      },
      {
        id: 2,
        value: 'Voided',
      }
    ];

  }

  constructor(private http: Http) {
    this.selectedData = this.items;
    console.log(this.selectedData);
  }

  protected pageChange(event: PageChangeEvent): void {
    this.skip = event.skip;
    this.loadItems();
  }

  private loadItems(): void {
    this.gridView = {
      data: this.items.slice(this.skip, this.skip + this.pageSize),
      total: this.items.length
    };
  }

  onSelectOutlet(val) {
    console.log(val);
    this.selectedData = this.items.filter(x => x.customerName == val);
  }


  onSelectStatus(val) {
    this.selectedData = this.items.filter(x => x.status == val);
    this.gridView = {
      data: this.selectedData.slice(this.skip, this.skip + this.pageSize),
      total: this.selectedData.length
    };
  }

}

您可以使用数据库对象上的更改侦听器执行类似操作,以便在复制两个特定文档时捕获。

由于听起来您希望这些文档在初始设置之后在其他地方进入数据库,另一种方法是进行一次性复制以获取这些第一个文档,然后在它之后开始连续复制已经结束了。