【问题标题】:graphql-subscription not working consistentlygraphql 订阅无法始终如一地工作
【发布时间】:2019-05-05 16:53:44
【问题描述】:

我们以这种方式在我们的应用程序中使用 graphql-subscription:

删除事件到达服务器时:

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() 没有通知客户端。

我们所有的订阅都存在这个问题,这只是其中一个例子。

可能是什么问题? 谢谢。

【问题讨论】:

  • 嗨@s123 你解决问题了吗?
  • @FrancisRodrigues 是的,我发布了答案 :)

标签: graphql-subscriptions


【解决方案1】:

我的问题是我们在关闭组件时保持打开状态的订阅。在某些时候,服务器无法管理所有订阅。

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

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多