refactor: use abort than checker

This commit is contained in:
EnixCoda 2022-05-26 22:41:26 +08:00
parent ec78f36e67
commit cbac7542ff
2 changed files with 9 additions and 9 deletions

View file

@ -20,9 +20,9 @@ export function useVisibleNodesGenerator(metaData: MetaData) {
// Only run when metadata or accessToken changes
useSequentialEffect(
useCallback(
checker => {
shouldAbort => {
catchNetworkErrors(async () => {
if (!checker()) return
if (shouldAbort()) return
setStateContext('tree-loading')
const { userName, repoName, branchName } = metaData
@ -36,7 +36,7 @@ export function useVisibleNodesGenerator(metaData: MetaData) {
true,
accessToken,
)
if (!checker()) return
if (shouldAbort()) return
setStateContext('tree-rendering')

View file

@ -5,15 +5,15 @@ import { useEffect } from 'react'
* the later effect ends earlier than the previous one, and the previous effect overlaps later effect's result.
*/
export function useSequentialEffect(
effect: (checker: () => boolean) => (() => void | undefined) | void,
effect: (shouldAbort: () => boolean) => (() => void | undefined) | void,
) {
useEffect(() => {
// The previous effect should stop running when finding checker returning false.
let valid = true
const checker = () => valid
const defect = effect(checker)
// The previous effect should stop running if shouldAbort returns true.
let end = false
const shouldAbort = () => end
const defect = effect(shouldAbort)
return () => {
valid = false
end = true
defect?.()
}
}, [effect])