领域:初始同步后的通知

Realm: Notification after initial sync

根据 the docs Realm 可以在某些操作发生时通知您,例如 "every time a write transaction is committed"。我正在使用 Realm 对象服务器,当用户第一次打开我的应用程序时,大量数据会从服务器同步到应用程序。在 Realm 完成其初始同步之前,我想显示一个加载屏幕并且不显示我的应用程序的主要 UI。有没有办法通知/确定此过程何时完成?

realm.io 网站刚刚发布 documentation 如何执行此操作。

异步打开领域

如果打开 Realm 可能需要耗时的操作,例如应用迁移或下载同步 Realm 的远程内容,您应该使用 openAsync API 来执行获取 Realm 所需的所有工作在分派到给定队列之前在后台线程上达到可用状态。您还应该将 openAsync 与设置为只读的领域一起使用。

例如:

Realm.openAsync({
  schema: [PersonSchema],
  schemaVersion: 42,
  migration: function(oldRealm, newRealm) {
    // perform migration (see "Migrations" in docs)
  }
}, (error, realm) => {
  if (error) {
    return;
  }
  // do things with the realm object returned by openAsync to the callback
  console.log(realm);
})

openAsync 命令将配置对象作为第一个参数,将回调作为第二个参数;回调函数接收一个布尔错误标志和打开的领域。

初始下载

在某些情况下,您可能不想打开一个 Realm,直到它具有所有可用的远程数据。在这种情况下,请使用 openAsync。当与同步领域一起使用时,这将在调用回调之前下载领域的所有内容。

var carRealm;
Realm.openAsync({
  schema: [CarSchema],
  sync: {
    user: user,
    url: 'realm://object-server-url:9080/~/cars'
  }
}, (error, realm) => {
  if (error) {
    return;
  }
  // Realm is now downloaded and ready for use
  carRealm = realm;
});