Firebase功能正常工作,但始终以超时状态结束

时间:2018-07-26 08:02:12

标签: node.js firebase firebase-cloud-messaging google-cloud-functions

我在这里找到使用Firebase Firestore和Cloud Functions的项目的解决方案。

问题制造者

直到昨天早上,一切正常。下午,我通读控制台,可以更新“ npm”和Node。所以我做到了,问题开始了。

问题:

首先,我遇到了著名的“ $ RESOURCE_DIR ”问题,解决了用“ functions ”替换该字符串的问题。之后,我可以在Firebase (不进行编辑)上编译和发布函数,它们可以正常工作,但是有一个(大)问题: 在Firebase平台的控制台日志中,我总是读取foreach函数,这些函数以状态超时关闭,即使它已完成 正确

在控制台中,我可以阅读消息

  

已成功发送消息。...

并且我在设备上收到通知,但是60秒钟后我收到

  

函数执行耗时60002毫秒,状态为:“超时”

嗯...这是我不明白如何解决问题的地方。谁能帮我吗?

这是产生错误的简单函数之一:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();

exports.notifyProfileApproved = functions.firestore.document('/users/{user_id}')
    .onUpdate((change , context) => {
        const approvedBefore = change.before.data().approved;
        const approvedAfter = change.after.data().approved;

        if(approvedBefore === false && approvedAfter === true){
            var registrationToken = change.after.data().registrationToken;

            var message = {
                notification: {
                    title: 'Approved profile',
                    body: 'Your profile has been approved!'
                },
                token : registrationToken
            };

            return admin.messaging().send(message)
            .then((response) =>{
                return console.log('Successfully sent message: ', response);
            })
            .catch((error) =>{
                return console.log('Error sending message: ', error);
            });)
        }else{
            return console.log('Profile edited but not approved');
        }
    });

这是我的系统信息:
npm:4.2.0
节点:7.10.0
火力地堡:4.0.0

更新

2018年7月17日,我收到Firebase电子邮件,通知我我的项目已自动更新为 Blaze计划,因为Google Cloud Platform发生了更改,但我从未输入过方法。 显然没有做任何事情(仅重新启动PC,重新部署并切换到免费的 Spark Plan ),现在执行时间从50毫秒变为350毫秒,因此可以!

即使功能正常运行,控制台中也会出现一个新错误。错误是:

  

函数返回了未定义的预期承诺或值

功能代码与上面相同。为了解决这个问题,每次没有承诺时,我都必须返回一个值。因此,我每次都更改了

return console.log('', response);

使用

console.log('', response);
return 0;

现在一切正常!

1 个答案:

答案 0 :(得分:0)

2018年7月17日,我收到Firebase电子邮件,通知我我的项目已自动更新为 Blaze计划,因为Google Cloud Platform发生了更改,但我从未输入过方法。 显然没有做任何事情(仅重新启动PC,重新部署并切换到免费的 Spark Plan ),现在执行时间从50毫秒变为350毫秒,因此可以!

即使功能正常运行,控制台中也会出现一个新错误。错误是:

  

函数返回了未定义的预期承诺或值

功能代码与上面相同。为了解决这个问题,每次没有承诺时,我都必须返回一个值。因此,我每次都更改了

return console.log('', response);

使用

console.log('', response);
return 0;

更新2

firebase lib中有一个错误,该错误已于昨天早上修复,可能是这种情况的原因。因此,如果您发现了此问题,请尝试更新Firebase。

现在一切正常!