This guide page強調複合操作「不是原子」和「不是事務」,但在那裏給出並在下面複製的示例似乎並未證明它們不是事務。如果Bob的編輯首先到達,那麼顯示的最終結果與該序列一致:澄清複合操作的非原子性
- 所有Bob的編輯都已應用。
- 然後所有愛麗絲的編輯都被應用了。
是Bob的前兩個編輯沒有實際應用,因此,例如,如果我們取消Alice的編輯,我們將結束與眼前這個?:
{
'address' : 'Anytown, USA' // Bob's address!
}
問題
我參考的指南部分如下。
雖然在一個複合操作進行的修改被遞送在一起時,它們不是原子。由於衝突的解決,可能會導致複合操作中的某些編輯操作不會被執行。想象一下兩個編輯人員同時修改同一個協作地圖的協作場景。愛麗絲運行此代碼:
model.beginCompoundOperation();
myCollaborativeMap.set('name', 'Alice');
myCollaborativeMap.set('phone', '555-5309');
model.endCompoundOperation();`
和鮑勃運行此代碼:
model.beginCompoundOperation();
myCollaborativeMap.set('name', 'Bob');
myCollaborativeMap.set('phone', '555-0000');
myCollaborativeMap.set('address', 'Anytown, USA');
model.endCompoundOperation();
如果Bob的編輯在服務器第一個到達終點,在地圖的內容最終會解析爲:
{
'name' : 'Alice', // Alice's name
'phone' : '555-5309', // Alice's number
'address' : 'Anytown, USA' // Bob's address!
}
如果Alice的編輯在服務器第一個到達終點,在地圖的內容將是:
{
'name' : 'Bob', // Bob's name
'phone' : '555-0000', // Bob's number
'address' : 'Anytown, USA' // Bob's address
}