У меня есть несколько проблем, оборачивающих мои обещания.На этот раз я пытаюсь объединить 4 запроса Firestore в один и проверяю, возвращает ли какой-либо из этих запросов результат, если да, я хочу выдать ошибку пользователю, если нет, я хочу продолжить отправку электронного письма и сохранениеэто данные.
Как мне ждать / комбинировать запросы и проверять результаты?
Вот что я сделал до сих пор:
export const sendMail = functions.https.onRequest((req: functions.Request, res: functions.Response) => {
const { name, email, doc, state, city, phone, msg, } = req.body
var dbPromises = [];
const ip1 = req.headers["fastly-client-ip"]
dbPromises.push(firestore.collection('messages').where('ip1', '==', ip1).get())
const ip2 = req.headers["x-forwarded-for"]
dbPromises.push(firestore.collection('messages').where('ip2', '==', ip2).get())
dbPromises.push(firestore.collection('messages').where('email', '==', email).get())
dbPromises.push(firestore.collection('blocked-emails').where('email', '==', email).get())
Promise.all(dbPromises)
.then(() => {
// TODO validate if there is any result > 0, if any, throw error to the user, else continue into sending the email
});
const mailOptions = {
from: `"${name}" <${email}>`,
to: 'a_email@gmail.com',
replyTo: `"${name}" <${email}>`,
subject: `Contact - ${name}`,
html: `<div>${name}</div>
<div>${email}</div>
<div>${doc}</div>
<div>${state}</div>
<div>${city}</div>
<div>${phone}</div>
<div>${msg}</div>`,
}
cors()(req, res, () => {
transport
.sendMail(mailOptions)
.then(() => {
firestore
.collection('messages')
.add({
name: name,
email: email,
doc: doc,
state: state,
city: city,
phone: phone,
msg: msg,
ip1: ip1,
ip2: ip2,
})
.then(() => {
return res.status(201).send()
})
})
.catch(error => {
console.log('Internal error.', error)
return res.status(500).send()
})
})
})
Как действительно объединитьи проверить, если какой-либо результат> 0, возвращая ошибку пользователю?