使用 typescript 和 if 语句的云函数

Posted

技术标签:

【中文标题】使用 typescript 和 if 语句的云函数【英文标题】:cloud function using typrescript and if statment 【发布时间】:2021-01-15 02:06:27 【问题描述】:

你好,我是云功能的新手,我想问一下为什么在一个 if 语句中获得多个主题 这是我的云功能:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();

const fcm = admin.messaging();

export const sendToTopic = functions.firestore
  .document("Doctor2019/documentId")
  .onCreate(async snapshot => 

    const payload: admin.messaging.MessagingPayload = 
      notification: 
        title: 'NEW POST!',
        body: `Click here to see New Post`,
        icon: 'your-icon-url',
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      
    ;

    return fcm.sendToTopic('Doctor2019', payload);
  );


问题是我有不止一个主题我想做的是检查其他集合上文档的创建并基于此发送通知,我真的不知道该怎么做,有什么帮助吗?

【问题讨论】:

那么,您是在问if 是如何工作的? developer.mozilla.org/de/docs/Web/javascript/Reference/… 不,我的问题是算法将如何,因为我似乎无法弄清楚 【参考方案1】:

我了解到您希望将消息发送到 FCM 上与不同文档创建相关联的不同主题。

您不能使用一个函数来实现这一点,因为该函数与特定集合上的文档创建相关联。您需要做的是为不同的集合创建不同的函数。

【讨论】:

感谢您理解我想要的。这是真的吗? 多功能会增加账单不是吗? 是的,您不能为一个函数定义多个触发器。对于您关于账单的问题,如果您的一个或多个功能并且使用相同,那么计费将是相同的。云功能计费取决于您调用该功能的次数,如果未调用该功能,则您支付 0。有关计费的更多信息here。另外,请注意,您有一个非常慷慨的免费套餐 是的,我看过帐单,有几件事我不明白,你能帮我说清楚吗?如果是,我想知道我的应用程序仅在某个事件发生时才向用户发出通知,在我的情况下,它是创建文档,不会在创建计算空间和时间时添加太多功能吗?并且每个函数每月不会调用很多函数 4 或 5 次【参考方案2】:

如果我正确理解您的目标,您可以使用wildcard 代替文档 ID以及 代替集合 ID。然后你使用context对象获取集合ID的值如下:

export const sendToTopic = functions.firestore
    .document("collectionId/documentId")
    .onCreate(async (snap, context) =>   // Note the addition of context

        const collectionId = context.params.collectionId;
        
        const payload: admin.messaging.MessagingPayload = 
            notification: 
                title: 'NEW POST!',
                body: `Click here to see New Post`,
                icon: 'your-icon-url',
                click_action: 'FLUTTER_NOTIFICATION_CLICK'
            
        ;

        return fcm.sendToTopic(collectionId, payload);
    );

如果您有不应该触发消息的根集合,只需调整您的数据模型并将需要触发消息的集合作为特定文档的子集合。比如:

export const sendToTopic = functions.firestore
    .document("messagingTriggers/triggers/collectionId/documentId")
    .onCreate(async (snap, context) => ...);

然后,在 users 集合中创建任何文档都不会触发 Cloud Function。

【讨论】:

以上是关于使用 typescript 和 if 语句的云函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript系列教程09条件语句的使用

TypeScript系列教程09条件语句的使用

为啥使用“if-else”语句会在看似相同的三元运算符构造不会产生 TypeScript 编译器错误?

在 Typescript 中的 if 语句中限制赋值

在 Nuxt / Vue (Typescript) 中具有属性的组件 v-if 语句

TypeScript(07): 条件语句