メインコンテンツまでスキップ

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を避けることを推奨します。