Вам не нужно вкладывать так много обещаний, почему бы вам не попробовать что-то вроде этого:
exports.sendRepairInitiatedEmail = functions.firestore.document('repairs/{id}').onCreate((snap, context) => {
const repair = snap.data();
let getCustomer = admin
.firestore()
.collection('customers')
.doc(repair.customerId)
.get();
let getConfig = admin
.firestore()
.collection('configuration')
.where('clientId', '==', repair.clientId)
.get();
return Promise.all([getCustomer, getConfig])
.then(values => {
const [customer, configuration] = values;
console.log('Sending email to ' + customer.customerEmail);
const msg = {
to: customer.customerEmail,
from: configuration.companyEmail,
templateId: 'sendGridid',
dynamic_template_data: {
name: customer.customerName,
device: repair.device,
accessCode: repair.accessCode,
storeName: configuration.storeName,
phone: configuration.phoneNumber,
},
};
console.log('Repair initiated email successfully sent to ' + customer.customerName);
return sgMail.send(msg);
});
});
Этот код просто использует все возвращаемые значения из обещаний одно за другим без необходимости делать их доступными для более широкой области.
Или, в качестве альтернативы, если возможно, вы можете превратить все это в асинхронную / ожидающую структуру, и она будет выглядеть намного чище, это будет что-то вроде этого (не проверено):
exports.sendRepairInitiatedEmail = functions.firestore.document('repairs/{id}').onCreate(async (snap, context) => {
const repair = snap.data();
const customer = await admin
.firestore()
.collection('customers')
.doc(repair.customerId)
.get();
const configuration = await admin
.firestore()
.collection('configuration')
.where('clientId', '==', repair.clientId)
.get();
console.log('Sending email to ' + customer.customerEmail);
const msg = {
to: customer.customerEmail,
from: configuration.companyEmail,
templateId: 'sendGridid',
dynamic_template_data: {
name: customer.customerName,
device: repair.device,
accessCode: repair.accessCode,
storeName: configuration.storeName,
phone: configuration.phoneNumber,
},
};
console.log('Repair initiated email successfully sent to ' + customer.customerName);
return await sgMail.send(msg);
});