代码之家  ›  专栏  ›  技术社区  ›  danday74

谷歌云发布/订阅获取或创建订阅

  •  0
  • danday74  · 技术社区  · 3 年前

    我有两个工作代码,如下所示。

    这将获取现有订阅:

    this.pubSubClient = new PubSub()
    sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
    

    创建并获取不存在的订阅:

    this.pubSubClient = new PubSub()
    this.topic = this.pubSubClient.topic(appConfig.pubSub.topic)
    [sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
    

    这一切都很有效。但是,如果订阅不存在(在一个环境中),则第一位代码会导致问题,如果订阅确实存在(在另一个环境中),则第二位代码会导致问题。

    所以我试着这么做:

    let sub
    
    try {
      sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
      console.log('using existing subscription')
    } catch (err) {
      [sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
      console.log('using created subscription')
    }
    

    但上述方法不起作用,因为第一行代码从不触发错误。它只是无法收到任何信息。有命令吗 getOrCreateSubscription 我可以使用它来获取订阅,并在必要时创建订阅?

    蒂亚

    1 回复  |  直到 3 年前
        1
  •  1
  •   danday74    3 年前

    最好的办法似乎是订阅感兴趣的主题,如果它没有列出,那么它就不存在,所以创建它,否则就获取它

    const [subscriptions] = await this.topic.getSubscriptions()
    const subs = subscriptions.map(subscription => last(subscription.name.split('/')))
    const subExists = subs.includes(appConfig.pubSub.subscription)
    
    let sub
    
    if (subExists) {
      sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
      console.log('using existing subscription')
    } else {
      [sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
      console.log('using created subscription')
    }
    

    FYI last从lodash导入,并返回数组中的最后一项