#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
точно так же, как и любое другое обещание.