The comments about a function call waiting until an argument is defined is a potentnially misleading way of thinking about await. The calls to saveToCloudFirestore and sendEmailInSendgrid do not execute in parallel. await only really replaces .then()s and can't (as far as I know) achieve an effect like Promise.all()
I don't understand the line:
> return; // the return is only here because .then() callbacks need a return
I have never seen anyone do this before and have seen many .then() callbacks work. As far as I can tell `return;` is equivalent to letting the function reach the end.
Nitpick: in the sendEmailInSendgrid function, msg is never defined. I assume res.msg or res was meant.