Firebase Cloud Scheduler未执行Promise问题排查求助
问题原因及解决方案
核心问题
你的定时任务触发器没有等待异步函数 notificationTriggerHandler 执行完成就提前终止了。
在定时任务代码中:
export const notificationTrigger = functions.pubsub .schedule("0 20 * * *") .onRun(() => { console.log("CRON JOB TRIGGERED"); notificationTriggerHandler(); // 未等待异步操作完成 });
onRun 回调是普通函数,调用 notificationTriggerHandler 后会立即返回,Firebase Cloud Functions 会判定函数执行完毕并直接终止进程,导致后续的 Firestore 查询还未执行就被中断,因此 LOG 2 无法打印。
而 Firestore 文档变更触发器直接将 notificationTriggerHandler 作为回调传入,这是一个异步函数,Firebase 会自动等待它返回的 Promise 完成后再终止函数,所以所有逻辑都能正常执行。
修复方案
修改定时任务的 onRun 回调为异步函数,并等待 notificationTriggerHandler 执行完成:
export const notificationTrigger = functions.pubsub .schedule("0 20 * * *") .onRun(async () => { // 改为异步函数 console.log("CRON JOB TRIGGERED"); await notificationTriggerHandler(); // 等待异步操作完成 });
这样 Firebase 会等待 notificationTriggerHandler 中的所有异步逻辑(包括 Firestore 查询)执行完毕后再终止函数,LOG 2 就能正常打印了。
另外,notificationTriggerHandler 声明返回类型为 Promise<void>,但实际返回 null,虽然不影响功能,建议改为直接 return 或去掉返回语句,保持类型一致。
内容的提问来源于stack exchange,提问作者Surafel
相关产品推荐
相关产品推荐

