Hola, estoy usando Firebase para backend y quiero entender por qué esto solo está colgado en la terminal.
Estoy intentando sembrar mi lista de autenticación y mi base de datos de Firestore, así que creé un script de sembrado. Leo una lista de usuarios de un archivo JSON y luego los agrego a Auth; sin embargo, para crear un registro de usuario coincidente en Firestore, conservo la ID de usuario que me createUserWithEmailAndPassword para crear un objeto de usuario con first_name y last_name (atributos triviales).
Luego, devuelvo ese objeto de usuario y resuelvo todas las promesas con Promise.all y luego sigo usando setDoc para agregar cada uno de esos objetos de usuario a Firestore.
Nota: ambas matrices de promesa se crean mediante funciones de mapa en la lista de usuarios inicial de JSON y luego en la lista de objetos de usuario devueltos de Auth, respectivamente.
El punto clave aquí es que, a pesar de que todo está bien agregado a mi Auth y Firestore... la terminal permanece colgada, sin éxito...
const { store, auth } = require('../config.js'); const { createUserWithEmailAndPassword } = require('firebase/auth'); const { doc, setDoc } = require('firebase/firestore'); const data = require("./SEED_DATA.json"); console.log(data ? "DATA PRESENT" : "") const seedUsers = async (users) => { // seeds firebase Auth const user_auth_hydrated = await Promise.all(users.map(user => { return createUserInAuth(user) })) // seeds firebase Firestore // we wait for auth because we want to retain the uids to create matching records in store const user_store = await Promise.all(user_auth_hydrated.map(user => { return createUserInStore(user) })) Promise.resolve(user_store) } const createUserInAuth = async ({first_name, last_name, email, password}) => { return await createUserWithEmailAndPassword(auth, email, password) .then((userCredential) => { // Signed in const {uid} = userCredential.user; return { ID: uid.toString(), FIRSTNAME: first_name, LASTNAME: last_name } }) .catch(err => console.log("USER ADD AUTH FAILED", err.code, err.message)) } const createUserInStore = async ({ID, FIRSTNAME, LASTNAME}) => { return await setDoc(doc(store, 'users', ID), {FIRSTNAME, LASTNAME}) } seedUsers(data); Imagen de la terminal colgando después de la ejecución (todo está bien en Auth y Firestore): 
No debe mezclar el enfoque tradicional de promesas y la sintaxis async/await. Aconsejo seguir con async/await solamente.
La función asíncrona seedUsers devuelve undefined. Haciendo Promise.resolve(user_store) no hace nada excepto crear un objeto que se destruye al final de la función.
Debes arreglar tu código de la siguiente manera:
const seedUsers = async (users) => { /* your logic */ return user_store; }y
const createUserInAuth = async ({first_name, last_name, email, password}) => { try { const userCredential = await createUserWithEmailAndPassword(auth, email, password); /* your return logic */ } catch (error) { /* your error logic */ } }