离开页面时,我得到:未处理的 GraphQL 订阅错误错误:GraphQL 错误:未提供所需类型 xxx 的变量 xx

Posted

技术标签:

【中文标题】离开页面时,我得到:未处理的 GraphQL 订阅错误错误:GraphQL 错误:未提供所需类型 xxx 的变量 xx【英文标题】:When leaving the page I get: Unhandled GraphQL subscription error Error: GraphQL error: Variable xx of required type xxx was not provided 【发布时间】:2020-05-22 06:44:55 【问题描述】:

我正在使用 vue-apollo graphql 进行开发。

在页面 multisgs/_id.vue 我有几个“subscribeToMore”的查询,每个都有不同的变量。

      variables() 
        return 
          multisigId: this.$route.params.id,
        
      ,

当我离开页面时,我得到:

Unhandled GraphQL subscription error Error: GraphQL error: Variable "$multisigId" of required type "ID!" was not provided. 

我试过了:

  beforeDestroy() 
    this.$apollo.queries.multisig.skip = true
    this.$apollo.queries.multisig.stop()
  ,

没有运气。

为什么我在离开页面时会收到此错误?

为了提供更多上下文,我还在 layout.vue 中对数据库中的所有多重签名运行查询:

    multisigs: 
  query: gql`query 
    multisigs 
      _id
      name
      address 
        _id
        balance
      
    ,
  `,

所以我必须在不同地方查询对同一实体的订阅。当我转到 multigs/_id.vue 时,查询没有执行,所以除非我执行,否则我看不到任何订阅通知:

  mounted() 
    this.$apollo.queries.multisig.refetch()
  ,

我感觉 apollo 将两个查询合并为一个,因为它们是关于同一个实体 multisg 的查询。 这非常令人困惑和烦人。

谢谢。

【问题讨论】:

【参考方案1】:

我通过添加解决了它:

  skip () 
    return !this.$route.params || !this.$route.params.id
  ,

即使我不明白为什么离开页面时查询处于活动状态,它仍然有效。

【讨论】:

以上是关于离开页面时,我得到:未处理的 GraphQL 订阅错误错误:GraphQL 错误:未提供所需类型 xxx 的变量 xx的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL:突变运行时订阅未触发

使用带有 Kotlin 和流的 Android 上的 Apollo 订阅 GraphQL 时处理网络错误

Graphql 订阅未获取客户端变量

Apollo GraphQL 订阅

Graphql 日期字段类型必须是输出类型但得到:未定义

订阅未定义的错误处理 - Apollo 和 Angular 2