JavaScript Error - Error: Max listener limit exceeded at 1004

7 replies
Last updated: Jun 23, 2021
Hi Sanity fam, I've been working on a project for a client and just started receiving some Javascript errors stating:
Error: Max listener limit exceeded at 1004
. This started intermittently yesterday and said
at 1001
. It has since stopped being intermittent and is now permanently stating
Error: Max listener limit exceeded at 1004
. I previously figured it was due to some complex deskStructure stuff going on but have now completely removed all the complexities and am attempting to load an
S.editor()
for a specific ID and it's not loading a thing. Restarted the local instance of Studio, cleared by cookies and cache.
Thoughts?
Jun 21, 2021, 11:52 PM
Any insight on to what causes this/what the solution is for this? The max listeners error started cropping up at the end of Sunday and rendered the Studio completely unusable by early afternoon yesterday. I continued to check throughout the afternoon and evening without avail.
My solution was to duplicate our Production dataset into another dataset and to point our Studio and Web app to that dataset. I wouldn't want to consider this a long term solution. Any insight on how to prevent this or how to clear it up once the limit has been reached?
Jun 22, 2021, 2:19 PM
Hey Troy! This looks like something that needs to be looked at by a Sanity backend engineer. I’ll pass it along to the team.
Jun 22, 2021, 6:13 PM
projectId: hpttb1hr
dataset: production

🙏
Jun 22, 2021, 10:48 PM
Hi
user G
, are you still seeing the error? From our logs it seems like there are currently 0 active listeners on the project.
If the issue persists or happens again, could you try deleting all documents of type
system.listener
from your dataset to see if that helps?
Jun 23, 2021, 6:24 AM
Thanks for the insight on
system.listener
. Not seeing it since moving datasets and removing a
listenerQuery
call. Is there a better way to clean those up to prevent these issues from occurring?
Jun 23, 2021, 6:26 AM
Our backend should normally take care of cleaning them up, so using
documentStore.listenQuery
as follows should be alright: https://www.sanity.io/docs/structure-builder-typical-use-cases#980dd321b9db .
Here's another example of using it in a
useEffect
hook, ensuring you clean up the subscription:
function useHelp(documentId: string) {
  const [help, setHelp] = useState<IHelpMenu | undefined>();
  useEffect(() => {
    const sub = documentStore
      .listenQuery(`*[_id == "${documentId}"][0]`)
      .pipe(tap((val: IHelpMenu | undefined) => setHelp(val)))
      .subscribe();
    return () => sub.unsubscribe();
  }, [documentId]);
  return help;
}
Are you following any of these implementations?
Jun 23, 2021, 7:47 AM
Our backend should normally take care of cleaning them up, so using
documentStore.listenQuery
as follows should be alright: https://www.sanity.io/docs/structure-builder-typical-use-cases#980dd321b9db .
Here's another example of using it in a
useEffect
hook, ensuring you clean up the subscription:
function useHelp(documentId: string) {
  const [help, setHelp] = useState<IHelpMenu | undefined>();
  useEffect(() => {
    const sub = documentStore
      .listenQuery(`*[_id == "${documentId}"][0]`)
      .pipe(tap((val: IHelpMenu | undefined) => setHelp(val)))
      .subscribe();
    return () => sub.unsubscribe();
  }, [documentId]);
  return help;
}
Are you following any of these implementations?
Jun 23, 2021, 7:47 AM

Sanity.io – build remarkable experiences at scale

Sanity is a customizable solution that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.