firebase云调度功能不会在控制台上打印任何内容



我几个小时前问过这个问题。这个问题只得到了部分回答,然后就结束了,所以我认为再次发布它是合理的。

问题我创建了一个firebase云函数,该函数每分钟运行一次,以更新cloud firestore中的一些数据。正如我在前端测试的那样,代码的逻辑是正确的。然而,在我部署该功能后,除了部署时收到的2条通知消息外,firebase控制台上没有任何记录。此外,控制台上也没有记录任何错误。感谢@Doug Stevenson给出的答案,我现在知道firebase模拟器目前不支持调度函数,所以我无法使用模拟器测试该函数。我很困惑我哪里把代码弄错了。

index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const serviceAccount = require('./ServiceAccountKey.json')
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
})
exports.scheduledFunction = functions.pubsub.schedule('every 1 minute').onRun((context) => {
var rooms = [];
var open;
console.log("start");
const db = admin.firestore();
db.collection("rooms").get().
then((query) => {
console.log(query.docs);
......
})
})

package.json

{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"dependencies": {
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1"
},
"devDependencies": {
"firebase-functions-test": "^0.2.0"
},
"private": true
}

如果您提供一些云函数日志来分析正在发生的事情,那会更好。但是,从您的代码中,我们可以看到您的云功能中存在两个潜在问题:

  1. firebase-admin通常应在Cloud Functions运行时内进行初始化,无需任何参数。看见https://firebase.google.com/docs/functions/beta-v1-diff?authuser=0#new_initialization_syntax_for_firebase-管理员
  2. 您不会返回异步get()方法返回的Promise,它是调度的Cloud Function(以及所有后台触发的Cloud Function(中的关键。看见https://firebase.google.com/docs/functions/terminate-functions

所以,以下应该可以做到:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.scheduledFunction = functions.pubsub.schedule('every 1 minute').onRun((context) => {
var rooms = [];
var open;
console.log("start");
const db = admin.firestore();
return db.collection("rooms").get()
.then((querySnapshot) => {
console.log(querySnapshot.docs);
//......
return null;  // Or a promise returned by another async method call
})
});

相关内容

  • 没有找到相关文章

最新更新