dispose()
dispose()は、MonitorDog SDK detector instanceが使用していたresourceを即時解放する関数です。
logout()がユーザーsession終了を意味するなら、dispose()はページ終了、component unmount、detector instance破棄のようにSDK instanceをもう使用しない時点で呼び出すcleanup関数です。
役割
dispose()が呼び出されると、SDKは内部的に次の処理を実行します。
Webカメラdetectionを停止
-> カメラstreamを整理
-> 検知workerを終了
-> pose tracker/runtime状態を整理
-> SDK access tokenを削除
dispose()はMonitorDogサーバーにlogout activity eventを送信しません。ユーザーlogout記録が必要な流れでは、先にlogout()を呼び出してからdispose()を呼び出すことを推奨します。
パラメーター
dispose()は別途パラメーターを受け取りません。
detector.dispose();
logout()と異なりPromiseを返さないため、awaitする必要はありません。
使用するタイミング
dispose()はdetector instanceのlifecycleが終わる時点で呼び出します。
代表的な使用タイミングは次のとおりです。
- React component unmount
- ユーザーがMonitorDog SDKの動作するページから離れる場合
- detector instanceを新しく作成する前に既存instanceを破棄する場合
login()またはlogout()失敗後にresourceを確実に整理する必要がある場合
例:
useEffect(() => {
let disposed = false;
async function startDetector() {
const detector = await MonitorDogDetector.init({
apiBaseUrl: "https://api.monitor.dog/v1",
sessionTokenProvider,
onDetect,
});
if (disposed) {
detector.dispose();
return;
}
detectorRef.current = detector;
await detector.login({ email: currentUser.email });
await detector.start();
}
void startDetector();
return () => {
disposed = true;
detectorRef.current?.dispose();
detectorRef.current = null;
};
}, [currentUser.email]);
戻り値
dispose()は値を返しません。
detector.dispose();
戻り値の型は次のとおりです。
void
dispose()は同期関数です。呼び出し直後にSDKが保持しているlocal resourceの整理を開始し、顧客application codeで別途レスポンス値を処理する必要はありません。
logout()との違い
logout()はユーザーsession終了の流れです。可能であればlogout activity eventを送信した後、SDK tokenとsession状態を整理します。
dispose()はresource解放の流れです。サーバーlogout APIやMonitorDog logout event送信を試みず、現在のdetector instanceが使用しているカメラ、worker、token状態を整理します。
ユーザーlogoutボタンのようにsession終了の意味がある場合は、次の流れを推奨します。
try {
detector.stop();
await detector.logout();
} finally {
detector.dispose();
}
単にページが消える、またはcomponentがunmountされる場合は、dispose()だけを呼び出しても問題ありません。
失敗処理
dispose()はネットワークリクエストを実行しない同期cleanup関数です。
通常の使用では別途try/catchは必要ありません。ただし、logout()と一緒に使用する場合は、logout()の失敗有無に関係なくresourceを整理できるようにfinallyで呼び出すことを推奨します。
注意事項
dispose()は顧客Webサイトsessionをログアウトしません。dispose()はMonitorDog logout activity eventを送信しません。- ユーザーlogout記録が必要な場合は、
stop()後に先にlogout()を呼び出してください。 dispose()呼び出し後は、同じdetector instanceを再利用するよりもinit()で新しいinstanceを作成する流れを推奨します。- React unmountやroute changeでは、detector referenceを
nullにして重複cleanupを避けることを推奨します。