首页 > 解决方案 > firebase 函数返回未定义的、预期的 Promise 或值

问题描述

嗨,这是我也想用来将朋友请求通知从一个应用程序发送到另一个 android 应用程序的代码。

但我undefined在函数控制台中收到函数返回、预期的承诺或值错误,而且我没有得到令牌值..

我的代码如下...

'use-strict'

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

const db = admin.firestore();

exports.sendNotification = functions.firestore
    .document("users/{user_id}/notifications/{notification_id}")
    .onWrite((change,context)=>{

    const user_id = context.params.user_id;

    console.log("We have a notification to send to", user_id);

    var ref = db.collection('device_token').doc(user_id);
    var getDoc = cityRef.get().then(doc=>{
        if (!doc.exists) {
            return console.log('No such document!');
        } else {
            console.log('Document data:', doc.data());

            const payload = {
                notification: {
                    title: "Text.",
                    body: "You have a new Friend Request!",
                    icon: "default"
                }
            }

            return admin.messaging().sendToDevice(tockenDoc, payload).then(response=>{

                return console.log("Notification sent : success");

            });

        }
    }).catch(err=>{
        console.log('Error getting document', err);
    });

});

标签: javascriptnode.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


由后台操作触发的函数(例如在您的情况下写入 Firestore)并执行异步操作(例如sendToDevice()在您的代码中写入),需要返回一个值或一个承诺以明确它们何时完毕。您没有返回任何内容,因此 Cloud Functions 抱怨它不知道代码何时完成。

由于您没有在getDoc任何地方使用该变量,因此您不妨将其返回。从return admin.messaging().sendToDevice()那里开始会冒泡,并为 Cloud Functions 提供所需的信息,以了解让函数的容器保持活动状态所需的时间。

return cityRef.get().then(doc=>{
    ...
}).catch(err=>{
    ...
});

推荐阅读