문제

다음 문서가 있다고 가정 해 봅시다.

{ title: 'take out the trash', priority: 'medium' }
.

이 데이터를 동시에 편집하는 두 개의 서로 다른 클라이언트가 있습니다.클라이언트 1은 제목을 요리를 청소하고 클라이언트 2를 하이 에 맞게 우선 순위를 변경하려고합니다.

PouchDB를 사용하여 어떻게 구현할 수 있습니까?

도움이 되었습니까?

해결책

핸들러 업데이트 부분 업데이트 는 couchdb에서 지원되지만, PouchDB를 사용하여 나중에 작업을 수행하도록 PouchDB를 사용하여 나중에 동기화하는 목적을 물리려는 각 업데이트의 REST 호출이 필요합니다.또 다른 해결책은 모든 DOC가 델타 방법을 사용하는 것입니다.

이 함수는 모든 문서를 검색합니다.

function merge(obj1, obj2) {
  for (var i in obj2) {
    obj1[i] = obj2[i];
  }
}

function all(db) {
  return new Promise(function(fulfill, reject) {
    var docs = {};
    db.allDocs({include_docs: true}, function(err, doc) {

      // sort by createdAt as cannot guarantee that order preserved by pouch/couch
      doc.rows.sort(function(a, b) {
        return a.doc.$createdAt > b.doc.$createdAt;
      });

      doc.rows.forEach(function(el, i) {
        if (!el.doc.$id) { // first delta for doc?
          el.doc.$id = el.doc._id;
        }
        if (docs[el.doc.$id]) { // exists?
          merge(docs[el.doc.$id], el.doc);
        } else {
          docs[el.doc.$id] = el.doc;
        }
        if (i == doc.rows.length - 1) { // last element?
          fulfill(docs);
        }
      });
    });
  });
}
.

및이 기능을 사용하면 부분 업데이트를 할 수 있습니다.

function put(object, db) {
  object.$createdAt = (new Date()).toJSON();
  return new Promise(function(fulfill, reject) {
    db.post(object).then(function(object) {
      fulfill(object);
    });
  });
}
.

완전한 예는 파우치를 사용하여 부분 업데이트

을 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top