请求解释!/already exists/.test(err.message)方法及相关疑问
关于Firebase初始化错误处理的问题解答
1. /already exists/.test(err.message)是否来自Firebase官方文档?
Firebase官方没有推荐通过匹配错误消息文本的方式判断重复初始化错误。官方更建议两种更可靠的方案:
- 初始化前先检查
firebase.apps.length(就像你代码里第一行做的那样),从根源避免重复调用initializeApp; - 捕获错误后通过错误对象的
code属性判断(重复初始化对应的错误代码是app/duplicate-app),错误代码是稳定标识,不会像错误消息那样因本地化、版本更新发生变化。
你代码里用正则匹配错误消息的写法,是社区开发者总结的常见处理方式,但并非官方文档指定的标准方案。
2. err.message来源于JavaScript还是Firebase?
err.message是JavaScript标准Error对象的内置属性,所有原生Error实例都自带这个属性,用于存储错误的描述文本;- 但这里的错误消息内容(比如“Firebase App named '[DEFAULT]' already exists”)是Firebase在抛出错误时设置的:当
initializeApp检测到重复初始化时,Firebase会创建一个Error实例,并为其message属性赋值对应的提示内容。
补充:代码优化建议
你代码里同时做了前置检查和try-catch处理,其实可以简化——要么用前置检查避免错误,要么只用try-catch并通过错误代码判断,两种方式选其一即可。比如可以改成:
if (!firebase.apps.length) { try { firebase.initializeApp(config); } catch (err) { if (err.code !== 'app/duplicate-app') { console.error("Firebase initialization error", err.stack); } } }
内容的提问来源于stack exchange,提问作者Monica Smith
相关产品推荐
相关产品推荐

