Primero, pensé que las funciones de firebase estaban rotas. Luego, traté de hacer una función simple que devolviera Promise. Puse eso en index.js de nivel superior.
const testPromise = param => { console.log('return promise', param); return new Promise((resolve, reject) => { console.log('resolve promise'); resolve('derp'); }); }; testPromise('hede') .then(d => { console.log('resolved'); }) .catch(e => { console.log('e', e); }); AppRegistry.registerComponent(appName, () => App);Salida de la consola:
return promise hede resolve promiseMira, no hay un registro 'resuelto' ni un registro de errores.
Traté de cambiar las versiones de nodejs con nvm pero no tuve suerte. Probé v12.5.0, v12.18.2, v15.6.0, v10.16.3. Intenté como nvm use 12.5 && npm start
Intenté crear un nuevo proyecto nativo de reacción y copié todo. Ahora, funciona como se esperaba. Es una solución para mí, pero no marqué la pregunta como resuelta porque todavía hay un misterio, no pude entender por qué no funciona en el proyecto existente.
Parece que establecer inlineRequires en false dentro del archivo metro.config.js resuelve el problema.
module.exports = { transformer: { getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: false, }, }), }, };Después de hacer ese cambio, la salida es:
return promise hede resolve promise resolvedFuente: https://github.com/facebook/react-native/issues/31558#issuecomment-878342213