我正在尝试使用for循环更新realm中的多个对象:
let pendingReadings = database.objects('Readings').filtered('synced = false');
database.write(() => {
for (var k=0;k<pendingReadings.length;k++) {
pendingReadings[k].synced = true;
}
});
结果应该标记所有读数同步为真。但是,它仅将备选对象标记为已同步(可能在下一个请求进入时,先前的写入未完成)。一次更新所有条目的最佳方法是什么?
答案 0 :(得分:12)
Realm的查询结果是实时更新。您可以通过各种方式调整循环以解决此问题,但是通过在结果上使用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
一次,这也会略微提高性能。如果您愿意,可以使用带有Realm集合的for...of
循环,尽管与上面的“原始”循环相比,这样做会有轻微的性能损失。