Firebase云函数if判断接收布尔值false仍触发发邮件问题
问题原因
你的问题核心是数据类型不匹配:userData.notifications.emails字段实际存储的是字符串类型的"false",不是布尔类型的false。JavaScript 中非空字符串在if判断中都会被识别为真值,所以哪怕值是"false"也会进入发送邮件的分支,你拼接日志的时候字符串会直接输出内容,所以日志里会看到Send Emails YES: false的矛盾输出。
另外你代码里还有一处语法错误:else分支的日志字符串'Don't send Email'中单引号冲突,会导致代码编译报错,需要提前处理。
解决方案
- 优先修改判断逻辑,显式和布尔值
true做全等判断,彻底避免类型导致的误判:
// 修改前 if (userData?.notifications?.emails) { // 修改后 if (userData?.notifications?.emails === true) {
- 检查用户数据写入的逻辑,确认
userData.notifications.emails字段存储的是布尔值类型,不要存字符串格式的"true"/"false",从数据源避免同类问题。 - 可以在判断前加一行类型校验日志,快速确认字段类型:
functions.logger.log('邮件偏好字段类型:', typeof userData?.notifications?.emails, '字段值:', userData?.notifications?.emails)
- 修复else分支的语法错误,转义单引号或者换用反引号包裹字符串:
// 转义写法 functions.logger.log('Don\'t send Email') // 反引号写法 functions.logger.log(`Don't send Email`)
内容的提问来源于stack exchange,提问作者bastifix
相关产品推荐
相关产品推荐

