我有一个函数触发数据库更新:
exports.eventAddedTrigger = functions
.region('europe-west6')
.firestore
.document('users/{user_id}/events/{event_id}')
.onCreate(async (snap, context) => {
const event = snap.data();
if (event) {
const { user_id, event_id } = context.params;
const queue = getFunctions().taskQueue('enrol');
const signupDate = DateTime.fromSeconds(event.signupDate.seconds).minus({minutes: 2});
const now = DateTime.local({zone: 'Europe/Zurich'})
let scheduleDelaySeconds = Math.floor(signupDate.diff(now, 'seconds').seconds);
if (scheduleDelaySeconds < 0) {
scheduleDelaySeconds = 10;
}
functions.logger.info(`Scheduling enrollment for ${signupDate.toISO()} in ${scheduleDelaySeconds} seconds`);
await queue.enqueue(
{ user_id, event_id },
{
scheduleDelaySeconds
}
)
}
});
这个函数触发良好,但是当涉及到排队时,我总是得到以下错误
Error: Queue does not exist
而不管我运行的是仿真函数还是生产函数。
注册函数如下所示:
exports.enrol = functions
.region('europe-west6')
.runWith({
timeoutSeconds: 540,
memory: '1GB',
})
.tasks
.taskQueue()
.onDispatch(async (data) => {
const { user_id, event_id } = data.body;
await _enrol(user_id, event_id, db);
functions.logger.info(`Enrolled user ${user_id} to event ${event_id}`);
});
据我所知,我已正确初始化了应用程序:
initializeApp({
serviceAccountId: process.env.FIREBASE_SERVICE_ACCOUNT_ID,
});
我必须在别的地方登记排队吗?
1条答案
按热度按时间fumotvh31#
我已经尝试重现这个问题,并发现您需要使用以下语法初始化App:
其中DATABASE_NAME将是控制台中来自
firebaseConfig
的databaseURL。您可以通过访问应用程序部分下的项目设置来获取数据库。我找不到任何您可能初始化SDK的文档。我找到了显示SDK初始化的推荐文档。