Apollo-client: Invariant Violation: ObservableQuery with this id doesn't exist: 7

Created on 23 Aug 2019  路  2Comments  路  Source: apollographql/apollo-client

Intended outcome:
The intention was to update cache after a subscription.

Actual outcome:
The updateQuery section of SubscribeToMore causes the above mentioned error to be thrown. But the error is random. Sometimes it will work, then it will throw either Invariant Violation: ObservableQuery with this id doesn't exist: 7 or Uncaught Invariant Violation: ObservableQuery with this id doesn't exist: 51.

Invariant_error

The log readout is as follows:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Users\\d0475\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'dev' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle [email protected]~predev: [email protected]
6 info lifecycle [email protected]~dev: [email protected]
7 verbose lifecycle [email protected]~dev: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~dev: PATH: C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\frontend\node_modules\.bin;C:\Users\d0475\Documents\Cmder\bin;C:\Program Files\Git\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\share\vim\vim74;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5\ConEmu\Scripts;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5;C:\Users\d0475\Documents\Cmder\vendor\conemu-maximus5\ConEmu;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Docker\Docker\Resources\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\GNU\GnuPG\pub;C:\Program Files\Calibre2\;C:\Program Files\Git\cmd;C:\WINDOWS\System32\LibreSSL\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\d0475\AppData\Local\Microsoft\WindowsApps;C:\Users\d0475\AppData\Local\Microsoft\WindowsApps;;C:\Users\d0475\AppData\Local\now-cli;C:\Program Files\Heroku\bin;C:\Program Files\Microsoft VS Code\bin;C:\Users\d0475\AppData\Local\hyper\app-2.0.0\resources\bin;C:\Users\d0475\AppData\Roaming\npm;C:\Users\d0475\AppData\Local\Yarn\bin;C:\Users\d0475\Documents\Cmder
9 verbose lifecycle [email protected]~dev: CWD: C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\frontend
10 silly lifecycle [email protected]~dev: Args: [ '/d /s /c', 'set NODE_ENV=development&&node server.js' ]
11 silly lifecycle [email protected]~dev: Returned: code: 1  signal: null
12 info lifecycle [email protected]~dev: Failed to exec dev script
13 verbose stack Error: [email protected] dev: `set NODE_ENV=development&&node server.js`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\index.js:301:16)
13 verbose stack     at EventEmitter.emit (events.js:198:13)
13 verbose stack     at ChildProcess.<anonymous> (C:\Users\d0475\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:198:13)
13 verbose stack     at maybeClose (internal/child_process.js:982:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
14 verbose pkgid [email protected]
15 verbose cwd C:\Users\d0475\Documents\Projects\flamingo-ecom2\sick-fits\frontend
16 verbose Windows_NT 10.0.18362
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\d0475\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev"
18 verbose node v10.16.0
19 verbose npm  v6.5.0
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] dev: `set NODE_ENV=development&&node server.js`
22 error Exit status 1
23 error Failed at the [email protected] dev script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

How to reproduce the issue:
My code is as follows:

const DELETE_ITEM_SUBSCRIPTION = gql`
  subscription {
    itemDeleted {
        id
      }
  }
`;

const userQuery = graphql(
  CURRENT_USER_QUERY,
  {
    options: { 
      fetchPolicy: 'cache-and-network' ,
      pollInterval: 300
    },
  }
);

// Item
const Item = props => {
    const { item, urlReferer, client, data: { me, error, startPolling, stopPolling, subscribeToMore }} = props;
    stopPolling(600);

    let querySubscribe = subscribeToMore({
      document: DELETE_ITEM_SUBSCRIPTION,
      updateQuery: (previousResult, { subscriptionData }) => {
        if (!subscriptionData.data) return previousResult;

        const deletedItem = subscriptionData.data.itemDeleted;

        const prevFromCache = client.readQuery(({query: ALL_ITEMS_QUERY}));
        const items = previousResult.me.items.length == 0 ? prevFromCache.items : previousResult.me.items;

        const index = isDuplicateItem(deletedItem, items);

        if (index != -1) {
          if (previousResult.me.items.length == 0) {
            let data = update(prevFromCache, {
              items: { $splice: [[[parseInt(index)], 1]] }
            });
            client.writeQuery({ query: ALL_ITEMS_QUERY, data });
          } else {
            return update(previousResult, {
              me: {
                items: { $splice: [[[parseInt(index)], 1]] }
              }
            });
          }
        } else {
          return previousResult;
        }
      },
    });

    useEffect(() => {
      let isSubscribed = true;
      if(isSubscribed) {
        querySubscribe;
      }
      return () => {
        querySubscribe.unsubscribe;
        isSubscribed = false
      };
    },[urlReferer]);

   ...
}

const ItemWithApollo = withApollo(Item)
export default memo(userQuery(ItemWithApollo), arePropsEqual);

Versions
apollo-client: 2.6.3
react-apollo: 2.5.8
next: 9.0.0
react: 16.8.6

Additional Info
if I remove the updateQuery section the error goes away

Most helpful comment

Resolved by moving the subscription out of the body of the function.

can you elaborate on your solution a little?

All 2 comments

Resolved by moving the subscription out of the body of the function.

Resolved by moving the subscription out of the body of the function.

can you elaborate on your solution a little?

Was this page helpful?
0 / 5 - 0 ratings