【问题标题】:How to return a promise using Firebase Functions and Firestore?如何使用 Firebase 函数和 Firestore 返回承诺?
【发布时间】:2020-07-17 14:25:58
【问题描述】:

当用户提出请求时,将使用其各自的数据创建一个firestore 文档。文档的创建会触发firebase function,然后将电子邮件发送到特定地址。它工作正常,但是当此电子邮件已发送/未发送时,我如何从函数中获得返回成功/错误警报(客户端)的承诺。

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

exports.request = functions.firestore.document('requests/{requestId}').onCreate(async (snapshot, context) => {
  const itemDataSnap = await snapshot.ref.get();
  const name = itemDataSnap?.data()?.name ? itemDataSnap?.data()?.name : 'Unbekannt';
  const email = itemDataSnap?.data()?.email;
  const products = itemDataSnap?.data()?.products ? itemDataSnap?.data()?.products : 'Fehler: Keine Produkte vorhanden';

  return admin.firestore().collection('mail').add({
    to: [...],
    from: [email],
    message: {
      subject: ...,
      html: ...
    }
  }).then(() => console.log('Queued email for delivery!'))
});

如您所见,到目前为止,我正在记录 'Queued email for delivery!' 作为 Firebase 控制台的成功消息 - 但我如何才能将其带到客户端(给用户)

【问题讨论】:

    标签: angular typescript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    您的云函数是通过写入数据库来触发的。没有办法直接将值返回给客户端,因为这段代码没有直接连接到客户端。

    你有两个选择:

    1. 将此更改为callable Cloud Function,然后执行写入数据库并返回值。
    2. 将结果写入数据库,让客户端等待。

    例如,后者可以通过设置云函数写入的responses/{requestId} 集合/文档来完成。并且由于文档 ID 与请求 ID 相同,客户端可以等待该文档被写入。

    您还可以将 mail 集合中的文档 ID 基于 requestId,在这种情况下,客户端也可以等待该文档显示:

    return admin.firestore().collection('mail').doc(context.params.requestId).set(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 2018-04-29
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2018-09-27
      • 2018-07-27
      相关资源
      最近更新 更多