Для того чтобы связать эти функции в цепочку, каждый из них должен вернуть обещание.Когда они это сделают, вы можете вызывать их последовательно следующим образом:
return webhookSend()
.then(() => {
return emailSendgrid();
})
.then(() => {
return removeSubmissionProcessor();
});
Или параллельно так:
return Promise.all([webhookSend, emailSendgrid, removeSubmissionProcessor]);
Теперь, чтобы ваши функции возвращали обещания:
emailSendgrid
: похоже, это возвращает обещание (при условии, что sgMail.send(msg)
возвращает обещание), поэтому вам не нужно его менять.
removeSubmissionProcessor
: это вызывает функция, которая возвращает обещание, но не возвращает это обещание.Другими словами, он запускает асинхронный вызов (admin.database....remove()
), но не ожидает ответа.Если вы добавите return
перед этим вызовом, это должно сработать.
webhookSend
вызывает функцию, которая принимает обратный вызов, поэтому вам нужно либо использовать fetch
(который основан на обещании), а неrequest
, или вам нужно преобразовать его, чтобы вернуть обещание, чтобы связать его:
function webhookSend() {
return new Promise((resolve, reject) => {
request.post(
{
url: 'URLHERE',
form: {test: "value"}
},
function (err, httpResponse, body) {
console.log('REQUEST RESPONSE', err, body);
if (err) {
reject(err);
} else {
resolve(body);
}
}
);
});
}