DataStoreイベント
DataStoreは定期的にAmplifyのHubに状態通知を発行します。Hubをサブスクライブして、DataStoreの内部状態を知ることができます。以下の場合、イベントが発行されます:
- デバイスがネットワーク接続を失うか、回復する場合
- データがクラウドと同期される場合
- クラウドと同期されていない新しい未処理の変更がある場合
以下のDataStoreイベントが定義されています:
networkStatus
DataStoreの起動時およびネットワーク状態が変わるたびに発行されます
HubPayload NetworkStatusEventには以下が含まれます:
active(Bool): DataStoreがクラウドに接続可能なネットワーク上にある場合はtrue、そうでない場合はfalse
subscriptionsEstablished
DataStoreがすべてのモデルへのサブスクリプション確立を終了したときに発行されます
HubPayload: N/A
syncQueriesStarted
DataStoreが初期同期クエリを実行しようとするときに発行されます
HubPayload syncQueriesStartedEventには以下が含まれます:
models([String]): 各モデルのnameの配列
modelSynced
Dispatched once for each model after the model instances have been synced from the cloud
HubPayload modelSyncedEvent contains:
model:name(String): the name of the model that was synced
isFullSync(Bool):trueif the model was synced with a "full" query to retrieve all modelsisDeltaSync(Bool):trueif the model was synced with a "delta" query to retrieve only changes since the last syncnew(Int): the number of new model instances added to the local storeupdated(Int): the number of existing model instances updated in the local storedeleted(Int): the number of model instances deleted from the local store
syncQueriesReady
すべてのモデルがクラウドから同期されたときに発行されます
HubPayload: N/A
ready
DataStore全体が準備完了したときに発行されます。この時点ですべてのデータが利用可能です
HubPayload: N/A
outboxMutationEnqueued
Dispatched when a local change has been newly staged for synchronization with the Cloud
HubPayload outboxMutationEvent contains:
model:name(String): the name of the model that is awaiting publication to the Cloud
element:model(Model): the model instance that will be published
outboxMutationProcessed
Dispatched when a local change has finished synchronization with the Cloud and is updated locally
HubPayload outboxMutationEvent contains:
model:name(String): the name of the model that has finished processing
element:model(Model): the model instance that is processed_version(Int): version of the model instance_lastChangedAt(Int): last change time of model instance (unix time)_deleted(Bool): true if the model instance has been deleted in Cloud
outboxStatus
以下の場合に発行されます:
- DataStoreが起動する場合
- ローカルミューテーションがアウトボックスにキューイングされるたびに
- ローカルミューテーションの処理が完了するたびに
HubPayload OutboxStatusEventには以下が含まれます:
isEmpty(Bool): クラウドへのアップロード待機中のローカル変更がないかどうかを示すブール値
使用方法
ネットワーク状態がアクティブかどうかを確認するには、以下のリスナーを設定できます:
// Create listenerconst listener = Hub.listen('datastore', async hubData => { const { event, data } = hubData.payload; if (event === 'networkStatus') { console.log(`User has a network connection: ${data.active}`) }})
// Remove listenerlistener();To wait for the entire sync process to finish, you can listen for the ready event:
// Create listenerconst listener = Hub.listen("datastore", async hubData => { const { event, data } = hubData.payload; if (event === "ready") { // do something here once the data is synced from the cloud }})
// Remove listenerlistener();Here is an illustrative sample of events and payloads that happen when you start from an empty DataStore and start a sync. If you do:
await DataStore.clear();await DataStore.start();This gets logged:
Event: {"channel":"datastore","payload":{"event":"storageSubscribed"},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"networkStatus","data":{"active":true}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"outboxStatus","data":{"isEmpty":true}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"subscriptionsEstablished"},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"syncQueriesStarted","data":{"models":["ModelX","ModelY","ModelLala"]}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"modelSynced","data":{"isFullSync":true,"isDeltaSync":false,"counts":{"new":5,"updated":0,"deleted":2}}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"modelSynced","data":{"isFullSync":true,"isDeltaSync":false,"counts":{"new":296,"updated":0,"deleted":2}}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"modelSynced","data":{"isFullSync":true,"isDeltaSync":false,"counts":{"new":8155,"updated":0,"deleted":0}}},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"syncQueriesReady"},"source":"","patternInfo":[]}
Event: {"channel":"datastore","payload":{"event":"ready"},"source":"","patternInfo":[]}