GraphQL-подписка не работает последовательно - PullRequest
0 голосов
/ 04 декабря 2018

Мы используем graphql-подписку в нашем приложении следующим образом:

Когда на сервер поступает событие удаления:

pubsub.publish('onDeleteItem', {onDeleteItem: [msg.payload.ItemId]});

Решатели:

Subscription: { onDeleteItem: { subscribe: () => pubsub.asyncIterator('onDeleteItem'), }, },

Подписка на него со стороны нашего клиента:

const onDeleteItemSubscription = gql

          subscription onDeleteItem {
                onDeleteItem
  }

getItemsList () {
  queryRef.subscribeToMore({
      document: onDeleteItemSubscription ,
      updateQuery(prev: { itemList: AssetList }, {subscriptionData: {data}}) {
        if (!data) {
          return prev;
        } else {
          const deletedItems = (data as any).onDeleteItem;
          return {
                   itemList {...    *### //return filtered list*
                       }
            } 
          } 
       }
    };

Проблема в том, что иногда подписка работает нормально, а удаленный элемент фильтруется, как и ожидалось, но очень часто он просто не работает вообще.Нет журналов ошибок.Когда я отлаживаю его, я вижу, что проблема в том, что pubsub.publish () не уведомляет клиента.

Проблема возникает со всеми нашими подписками, и это только один из них.

В чем может быть проблема?Спасибо.

1 Ответ

0 голосов
/ 18 апреля 2019

Моя проблема заключалась в открытой подписке, которую мы оставили открытой, когда закрывали компонент.В какой-то момент сервер просто не смог управлять всеми подписками.

  private subscriptions = new Subscription();
  ...
  
  this.subscriptions.add( <some new subscription> )
  
  ...
  
  // when the component destroyed
  
  this.subscriptions.unsubscribe();
  
...