Как я могу передать данные из angular в мою облачную функцию и получить ответ обратно?

#javascript #firebase #google-cloud-functions #angularfire2

#javascript #firebase #google-cloud-функции #angularfire2

Вопрос:

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

мой файл index.ts:

 export const someTesting = functions.https.onCall(async (data) => {

  let success = false;
  const testData = {...data};

  await admin.firestore().collection('collection').add(testData).then(() => {
    return success = true;
  });
});
  

мой файл angular.ts

 async callCloudFunction(testData: TestData) {
  const sendDataToCloudFunctions = this.fun.httpsCallable('someTesting');

  // here I pass the data to the cloud function
  sendDataToCloudFunctions(testData);

  // here I want to consolte.log() the boolean success ...
}
  

Было бы здорово, если бы кто-нибудь мог показать мне, как это сделать. Спасибо!

Ответ №1:

Облачные функции вызываемого типа должны возвращать обещание, которое разрешается с помощью объекта данных для отправки клиенту. Прямо сейчас ваша функция ничего не возвращает. Единственный оператор return, который у вас есть, просто возвращается из функции обратного вызова, которую вы передали then .

Вы также не должны смешивать синтаксис async / await с then. Просто используйте один или другой, поскольку они имеют одну и ту же цель.

Если все, что вы хотите сделать, это вернуть логический статус успешного выполнения после завершения операции с базой данных, то сделайте это:

 export const someTesting = functions.https.onCall(async (data) => {

  let success = false;
  const testData = {...data};

  await admin.firestore().collection('collection').add(testData);
  return { success: true };
});
  

Чтобы получить результат в вашем приложении, вам нужно будет обработать обещание, возвращенное sendDataToCloudFunctions точно так же, как и любое другое обещание.