Note.getNoteByServerNoteId(noteId, function(noteLocal) { // 2.1 本地没有, 表示是新建 if(!noteLocal) { console.log('add: ...'); Note.addNoteForce(note, function(note) { me._syncInfo.note.adds.push(note); return canCall(); }); } else { // 如果Usn一样, 表示服务器端并没有修改 if(noteLocal.Usn === note.Usn) { console.log('note 如果Usn一样, 表示服务器端并没有修改'); return canCall(); } // 2.2 本地是否修改了, 冲突, 报告给前端, 前端处理 // 冲突, 将本地修改的笔记复制一份(设置冲突字段, ConflictNoteId), 远程的覆盖本地的 // 新方法: 冲突后, 得到最新内容, 看是否与本地内容一致, 如果一致, 则不冲突, 其它数据用服务器上的 if(noteLocal.IsDirty) { console.log('note 冲突.... serverNoteId: ' + noteId); // console.log(noteLocal.NoteId); // console.log(noteLocal.IsDirty); // console.log(noteLocal); // note.ServerNoteId = note.NoteId; // note.NoteId = noteLocal.NoteId; Note.getNoteContentFromServer(noteId, function (content) { // 表示没有获取到content, 则只能标志为冲突了 // 内容不一样, 也标为冲突 if (content === false || content != noteLocal.Content) { me._syncInfo.note.conflicts.push({server: note, local: noteLocal}); } // 否则, 内容一样, 标为不冲突, 需要更新 else { // 2.3 服务器是最新的, 用服务器的 // 服务器是最新的, 本地没动过, 则覆盖之 Note.updateNoteForce(note, function(note) { if(note) { me._syncInfo.note.updates.push(note); } canCall(); }, false); } }); return canCall(); // 2.3 服务器是最新的, 用服务器的 } else { // 服务器是最新的, 本地没动过, 则覆盖之 Note.updateNoteForce(note, function(note) { if(note) { me._syncInfo.note.updates.push(note); } canCall(); }); } } });
Note.getNoteContentFromServer(noteId, function (content) { // 表示没有获取到content, 则只能标志为冲突了 // 内容不一样, 也标为冲突 if (content === false || content != noteLocal.Content) { me._syncInfo.note.conflicts.push({server: note, local: noteLocal}); } // 否则, 内容一样, 标为不冲突, 需要更新 else { // 2.3 服务器是最新的, 用服务器的 // 服务器是最新的, 本地没动过, 则覆盖之 Note.updateNoteForce(note, function(note) { if(note) { me._syncInfo.note.updates.push(note); } canCall(); }, false); } });