diff options
author | crupest <crupest@outlook.com> | 2023-09-20 20:16:30 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2023-09-20 20:16:30 +0800 |
commit | 901fe3d7c032d284da5c9bce24c4aaee9054c7ac (patch) | |
tree | 573cfafd972106d69bef0d41ff5f270ec3c43ec2 /FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts | |
parent | 4165ca210d9660a67b16089c31b7f65b8b09e019 (diff) | |
download | timeline-901fe3d7c032d284da5c9bce24c4aaee9054c7ac.tar.gz timeline-901fe3d7c032d284da5c9bce24c4aaee9054c7ac.tar.bz2 timeline-901fe3d7c032d284da5c9bce24c4aaee9054c7ac.zip |
Fix lint errors.
Diffstat (limited to 'FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts')
-rw-r--r-- | FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts b/FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts new file mode 100644 index 00000000..01c5a1db --- /dev/null +++ b/FrontEnd/src/components/hooks/useAutoUnsubscribePromise.ts @@ -0,0 +1,24 @@ +import { useEffect, DependencyList } from "react"; + +export default function useAutoUnsubscribePromise<T>( + promiseGenerator: () => Promise<T> | null | undefined, + resultHandler: (data: T) => void, + dependencies?: DependencyList | undefined, +) { + useEffect(() => { + let subscribe = true; + const promise = promiseGenerator(); + if (promise) { + void promise.then((data) => { + if (subscribe) { + resultHandler(data); + } + }); + + return () => { + subscribe = false; + }; + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [promiseGenerator, resultHandler, ...(dependencies ?? [])]); +} |