Skip to content

@live LiveState unsubscribe cleanup function never gets called #4830

Closed
@subtleGradient

Description

@subtleGradient
/**
 * @RelayResolver Query.liveSubUnsubTest: Int
 * @live
 */
export function liveSubUnsubTest(): LiveState<number> {
  return {
    read() {
      console.log("liveSubUnsubTest", "read")
      return Date.now()
    },
    subscribe(didChange) {
      console.log("liveSubUnsubTest", "subscribe")
      const id = setInterval(() => {
        console.log("liveSubUnsubTest", "tick")
        didChange()
      }, 1234)
      return function unsubscribe() {
        console.log("liveSubUnsubTest", "unsubscribe")
        clearInterval(id)
      }
    },
  }
}
function LiveSubUnsubTestDemo() {
  const data = useClientQuery<LiveState__LiveSubUnsubTestDemo__Query>(
    graphql`
      query LiveState__LiveSubUnsubTestDemo__Query {
        liveSubUnsubTest
      }
    `,
    {},
  )

  if (!data.liveSubUnsubTest) {
    return <Text className="text-white">MIA</Text>
  }

  return (
    <>
      <Text className="text-white">
        {new Date(data.liveSubUnsubTest).toLocaleString()}
      </Text>
    </>
  )
}

after unmounting LiveSubUnsubTestDemo, I'm still getting the subscription ticks forever

 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick
 LOG  liveSubUnsubTest tick

console.log("liveSubUnsubTest", "unsubscribe") is never called

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions