Javascript firebase云计划功能不在控制台上打印任何内容

Javascript firebase云计划功能不在控制台上打印任何内容,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我几个小时前问过这个问题。这个问题只回答了一部分,然后就结束了,所以我认为再次发布是合理的 问题 我创建了一个firebase cloud函数,它每分钟运行一次,以更新cloud firestore中的一些数据。正如我在前端测试的那样,代码的逻辑是正确的。但是,在我部署该功能后,firebase控制台上除了部署时收到的2条通知消息之外,没有任何记录。此外,控制台上也没有记录错误。感谢@Doug Stevenson给出的答案,我现在知道firebase模拟器目前不支持调度函数,因此我无法使用模拟器

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

问题 我创建了一个firebase cloud函数,它每分钟运行一次,以更新cloud firestore中的一些数据。正如我在前端测试的那样,代码的逻辑是正确的。但是,在我部署该功能后,firebase控制台上除了部署时收到的2条通知消息之外,没有任何记录。此外,控制台上也没有记录错误。感谢@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
}


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

  • firebase admin
    通常应在云函数运行时内无任何参数初始化。看
  • 您不会返回异步
    get()
    方法返回的承诺,该方法是计划云函数(以及所有后台触发函数)中的关键。看
  • 因此,以下几点可以做到:

    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
            })
    });
    

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

  • firebase admin
    通常应在云函数运行时内无任何参数初始化。看
  • 您不会返回异步
    get()
    方法返回的承诺,该方法是计划云函数(以及所有后台触发函数)中的关键。看
  • 因此,以下几点可以做到:

    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
            })
    });
    

    哇,真管用!但为什么添加服务帐户凭据不起作用?我遵循firebase提供的教程,其中该人员添加了服务帐户凭据作为参数:“为什么添加服务帐户凭据不起作用”=>因为这不是在云函数中初始化管理员应用程序实例的方法。您参考的教程主要用于在服务器中实现Node.js代码,并初始化服务器的管理应用程序实例。在视频中3分钟07秒,Jen Person解释说,对于云函数,有一种不同的方式(
    admin.initializeApp(Functions.config().firebase);
    )。然而,即使您使用这种方式,它也不会起作用,因为从那时起(以及从firebase SDK的1.0.0版开始,它已经发生了变化。我在答复中提到的文件对此作了解释。感谢雷诺的澄清!在成功运行了一整天之后,我发现这个函数出现了一个奇怪的问题(当我遇到“函数返回未定义”错误时,函数按预期打印了人员并修改了firestore数据),然后我对代码进行了一些更改,这些更改根本无法阻止它工作,但他们确实做到了!我得到的错误是“超出内存限制”。我发了一篇帖子:。你能看一下吗?哇,真管用!但为什么添加服务帐户凭据不起作用?我遵循firebase提供的教程,其中该人员添加了服务帐户凭据作为参数:“为什么添加服务帐户凭据不起作用”=>因为这不是在云函数中初始化管理员应用程序实例的方法。您参考的教程主要用于在服务器中实现Node.js代码,并初始化服务器的管理应用程序实例。在视频中3分钟07秒,Jen Person解释说,对于云函数,有一种不同的方式(
    admin.initializeApp(Functions.config().firebase);
    )。然而,即使您使用这种方式,它也不会起作用,因为从那时起(以及从firebase SDK的1.0.0版开始,它已经发生了变化。我在答复中提到的文件对此作了解释。感谢雷诺的澄清!在成功运行了一整天之后,我发现这个函数出现了一个奇怪的问题(当我遇到“函数返回未定义”错误时,函数按预期打印了人员并修改了firestore数据),然后我对代码进行了一些更改,这些更改根本无法阻止它工作,但他们确实做到了!我得到的错误是“超出内存限制”。我发了一篇帖子:。你能看看吗?