Как вернуть обещание, используя Firebase Functions и Firestore? - PullRequest
0 голосов
/ 05 апреля 2020

Когда пользователь подает запрос, создается документ firestore с соответствующими данными. Это создание документа вызывает firebase function, который затем отправляет электронное письмо на указанный c адрес. Он работает нормально, но как я могу получить обещание от функции возвратить предупреждение об ошибке / ошибке (на стороне клиента), когда это письмо было отправлено / не отправлено.

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 - , но как я могу донести это на стороне клиента (до пользователя) ?

1 Ответ

1 голос
/ 05 апреля 2020

Ваша облачная функция запускается при записи в базу данных. Невозможно вернуть значение клиенту напрямую, так как нет прямого подключения этого кода к клиенту.

У вас есть два варианта:

  1. Изменить это в вызываемую облачную функцию , которая затем выполняет запись в базу данных и возвращает значение.
  2. Записывает результат в базу данных, и клиент ожидает этого.

Последнее, например, можно сделать, настроив коллекцию / документ responses/{requestId}, в который будет записана функция облака. А поскольку идентификатор документа совпадает с идентификатором запроса, клиент может ожидать записи этого документа.

Вы также можете основать идентификатор документа в коллекции mail на requestId, в В этом случае клиент также может дождаться появления этого документа:

return admin.firestore().collection('mail').doc(context.params.requestId).set(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...