2016-06-17 69 views
4

我想更新多個對象境界反應本地使用循環這樣的更新多個對象:境界陣營原住民 - 如何在一個循環

let pendingReadings = database.objects('Readings').filtered('synced = false'); 
database.write(() => { 
    for (var k=0;k<pendingReadings.length;k++) { 
     pendingReadings[k].synced = true; 
    } 
}); 

結果應該標註真實同步所有讀數。但是,它僅將同步對象標記爲已同步(也許先前的寫入在下一個請求進入時未完成)。一次更新所有條目的最佳方式是什麼?

回答

8

領域的查詢結果是實時更新的。還有,你可以調整你的循環,以說明各種方式,但你會通過使用結果,而snapshot()方法獲得最佳的性能...

let pendingReadings = database.objects('Readings') 
           .filtered('synced = false') 
           .snapshot(); 
database.write(() => { 
    for (let i = 0, len = pendingReadings.length; i < len; i++) { 
     pendingReadings[i].synced = true; 
    } 
}); 

還要注意我調整了循環來只檢索length一次,這也會稍微改善性能。如果您願意的話,您可以使用for...of循環與Realm集合,雖然與上面的「原始」循環相比,這樣做有輕微的性能損失。

+0

感謝您的建議。但我的問題確實是這個循環中的所有對象都沒有同步。爲什麼會這樣呢?感謝您讓我知道快照方法。我正要尋找這樣的事情。 –

+0

由於查詢結果是實時更新並在'synced = false'上過濾,所以當您將第一個設置爲'true'('pendingReadings [0] .synced = true')時,它將從查詢結果中刪除,項目向下移動(第二個成爲第一個等)。這就是爲什麼你看到其他所有項目都被設置爲「true」。在這種情況下,使用'snapshot()'可以避免不必要的實時更新行爲。 –

+0

非常感謝您的解釋。工作很棒! –